Let's Encrypt est une autorité de certification créée par l'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 des 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 didacticiel vous guidera tout au long du processus d'obtention d'un Let's Encrypt gratuit à l'aide de l'outil certbot sur Debian 9. Nous vous montrerons également comment configurer Apache pour utiliser le nouveau certificat SSL et activer HTTP/2.
Prérequis #
Assurez-vous que vous avez satisfait aux prérequis suivants avant de poursuivre ce didacticiel :
- Connecté en tant qu'utilisateur avec des privilèges sudo.
- Avoir un nom de domaine pointant vers l'adresse IP du serveur public de votre serveur. 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 package 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 le numéro de 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 nouveau jeu 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 en fonction de 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
annuaire. Le serveur Let's Encrypt envoie des requêtes HTTP au fichier temporaire pour valider que le domaine demandé correspond au serveur sur lequel le certbot s'exécute.
Pour simplifier, nous allons mapper toutes les requêtes HTTP pour .well-known/acme-challenge
dans un seul répertoire, /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.confAlias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
/etc/apache2/conf-available/ssl-params.confSSLCipherSuite 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 SAMEORIGIN
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 inclut les déchiqueteuses recommandées, active l'agrafage OCSP, HTTP Strict Transport Security (HSTS) et applique quelques 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 http2
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:
- 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: https://eff.org/donate-le
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<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
Protocols h2 http/1.1
<If "%{HTTP_HOST} == 'www.example.com'">
Redirect permanent / https://example.com/
</If>
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
</VirtualHost>
Avec la configuration ci-dessus, nous forçons HTTPS et la redirection de www vers une 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 en utilisant https://
, et vous remarquerez une icône de cadenas vert.
Si vous testez votre domaine à l'aide du test de serveur SSL Labs, vous obtiendrez une note A+, comme indiqué ci-dessous :
Certificat SSL à renouvellement automatique #
Les certificats de Let’s Encrypt sont valides pendant 90 jours. Pour renouveler automatiquement les certificats avant leur expiration, le package certbot crée une tâche cron 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. Ajouter --renew-hook "systemctl reload apache2"
au /etc/cron.d/certbot
fichier de sorte qu'il ressemble à ce qui suit :
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 certbot --dry-run
commutateur :
sudo certbot renew --dry-run
S'il n'y a pas d'erreurs, cela signifie que le processus de renouvellement a réussi.