Android

Sécurisez Apache avec Let's Encrypt sur Debian 9

1st Design of 2020 - Grab your balloons and follow along! - Q Corner Showtime LIVE! E39

1st Design of 2020 - Grab your balloons and follow along! - Q Corner Showtime LIVE! E39

Table des matières:

Anonim

Let's Encrypt est une autorité de certification créée par Internet Security Research Group (ISRG). Il fournit des certificats SSL gratuits via un processus entièrement automatisé conçu pour éliminer la création, la validation, l'installation et le renouvellement manuels de certificats.

Les certificats émis par Let's Encrypt sont valides pendant 90 jours à compter de la date d'émission et approuvés par tous les principaux navigateurs aujourd'hui.

Ce tutoriel vous guidera à travers le processus d'obtention d'un Let's Encrypt gratuit en utilisant l'outil certbot sur Debian 9. Nous montrerons également comment configurer Apache pour utiliser le nouveau certificat SSL et activer HTTP / 2.

Conditions préalables

Assurez-vous d'avoir satisfait aux conditions préalables suivantes avant de poursuivre ce didacticiel:

  • Connecté en tant qu'utilisateur avec les privilèges sudo. Avoir un nom de domaine pointant vers l'IP de votre serveur serveur public. Nous utiliserons example.com .Apache installé. Un hôte virtuel apache pour votre domaine. Vous pouvez suivre ces instructions pour savoir comment en créer un.

Installer Certbot

Certbot est un outil complet et facile à utiliser qui peut automatiser les tâches d'obtention et de renouvellement des certificats SSL Let's Encrypt. Le paquet certbot est inclus dans les référentiels Debian par défaut.

Mettez à jour la liste des packages et installez le package certbot à l'aide des commandes suivantes:

sudo apt update sudo apt install certbot

Générer un groupe Strong Dh (Diffie-Hellman)

L'échange de clés Diffie – Hellman (DH) est une méthode d'échange sécurisé de clés cryptographiques sur un canal de communication non sécurisé.

Pour générer un nouvel ensemble de paramètres DH à 2048 bits, exécutez:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Si vous le souhaitez, vous pouvez modifier la taille jusqu'à 4096 bits, mais dans ce cas, la génération peut prendre plus de 30 minutes selon l'entropie du système.

Obtention d'un certificat SSL Let's Encrypt

Pour obtenir un certificat SSL pour notre domaine, nous allons utiliser le plugin Webroot qui fonctionne en créant un fichier temporaire pour valider le domaine demandé dans le ${webroot-path}/.well-known/acme-challenge . Le serveur Let's Encrypt envoie des requêtes HTTP au fichier temporaire pour valider que le domaine demandé est résolu sur le serveur sur lequel s'exécute certbot.

Pour le rendre plus simple, nous allons mapper toutes les requêtes HTTP pour .well-known/acme-challenge dans un répertoire unique, /var/lib/letsencrypt .

Les commandes suivantes créent le répertoire et le rendent accessible en écriture pour le serveur Apache.

sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp www-data /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt

Pour éviter la duplication de code, créez les deux extraits de configuration suivants:

/etc/apache2/conf-available/letsencrypt.conf

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS /etc/apache2/conf-available/ssl-params.conf

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Requires Apache >= 2.4.11 SSLSessionTickets Off SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

L'extrait ci-dessus utilise les déchiqueteurs recommandés par Cipherli.st, active l'agrafage OCSP, HTTP Strict Transport Security (HSTS) et applique peu d'en-têtes HTTP axés sur la sécurité.

Avant d'activer les fichiers de configuration, assurez-vous que mod_ssl et mod_headers sont activés en émettant:

sudo a2enmod ssl sudo a2enmod headers

Activez le module HTTP / 2, qui rendra vos sites plus rapides et plus robustes:

sudo a2enmod

Activez les fichiers de configuration SSL en exécutant les commandes suivantes:

sudo a2enconf letsencrypt sudo a2enconf ssl-params

Rechargez la configuration Apache pour que les modifications prennent effet:

sudo systemctl reload apache2

Utilisez l'outil Certbot avec le plugin webroot pour obtenir les fichiers de certificat SSL:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Si le certificat SSL est obtenu avec succès, certbot imprimera le message suivant:

IMPORTANT NOTES: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2019-01-17. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you lose your account credentials, you can recover through e-mails sent to [email protected]. - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Maintenant que vous disposez des fichiers de certificat, modifiez la configuration de l'hôte virtuel de votre domaine comme suit:

/etc/apache2/sites-available/example.com.conf

ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration

Avec la configuration ci-dessus, nous forçons HTTPS et redirige de la version www vers la version non www. N'hésitez pas à ajuster la configuration selon vos besoins.

Rechargez le service Apache pour que les modifications prennent effet:

sudo systemctl reload apache2

Ouvrez votre site Web à l'aide de https:// et vous remarquerez une icône de verrouillage verte.

Renouvellement automatique du certificat SSL Let's Encrypt

Les certificats de Let's Encrypt sont valables 90 jours. Pour renouveler automatiquement les certificats avant leur expiration, le package certbot crée un cronjob qui s'exécute deux fois par jour et renouvellera automatiquement tout certificat 30 jours avant son expiration.

Une fois le certificat renouvelé, nous devons également recharger le service Apache. Ajoutez --renew-hook "systemctl reload apache2" au fichier /etc/cron.d/certbot pour qu'il ressemble à ceci:

/etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"

Pour tester le processus de renouvellement, utilisez le commutateur --dry-run :

sudo certbot renew --dry-run

S'il n'y a pas d'erreur, cela signifie que le processus de renouvellement a réussi.

Conclusion

Dans ce didacticiel, vous avez utilisé le certbot client Let's Encrypt pour obtenir des certificats SSL pour votre domaine. Vous avez également créé des extraits Apache pour éviter la duplication de code et configuré Apache pour utiliser les certificats. À la fin du didacticiel, vous avez configuré un cronjob pour le renouvellement automatique des certificats.

apache debian cryptons certbot ssl

Ce message fait partie de Comment installer la pile LAMP sur la série Debian 9.

Autres articles de cette série:

• Comment installer Apache sur Debian 9 • Comment installer PHP sur Debian 9 • Comment configurer les hôtes virtuels Apache sur Debian 9 • Comment installer MariaDB sur Debian 9 • Sécuriser Apache avec Let's Encrypt sur Debian 9