Installer un certificat SSL/TLS Let’s Encrypt avec Certbot
Présentation
Depuis l’apparition de Let’s Encrypt, il n’est plus nécessaire de payer pour obtenir un certificat SSL. Rappelons qu’un certificat SSL permet de crypter les échanges entre le client (vous) et le serveur qui héberge le site Web.
Commençons par ajouter le Repository officiel et nous installerons ensuite Certbot.
1 2 3 4 5 |
$ apt-get update $ apt-get install software-properties-common $ add-apt-repository ppa:certbot/certbot $ apt-get update $ apt-get install certbot |
Configuration
Le plugin nécessite d’écouter sur le port 80 de votre serveur Web pour valider le certificat, il faut donc dans un premier temps stopper le serveur Web.
1 |
$ systemctl stop apache2 |
Vérifions si le port 80 est actif :
1 |
$ netstat -na | grep ':80.*LISTEN' |
Nous pouvons maintenant générer le certificat. Remplacez mondomaine.fr et www.mondomaine.fr avec votre propre nom de domaine.
1 |
$ certbot certonly --standalone --agree-tos -d mondomaine.fr -d www.mondomaine.fr --rsa-key-size 4096 |
Si tout s’est bien passé, vous devriez avoir 4 fichiers dans le dossier /etc/letsencrypt/live/www.mondomaine.fr.
1 2 3 4 5 |
$ ll /etc/letsencrypt/live/www.petitsurfeur.net lrwxrwxrwx 1 root root 44 déc. 31 22:38 cert.pem -> ../../archive/www.petitsurfeur.net/cert7.pem lrwxrwxrwx 1 root root 45 déc. 31 22:38 chain.pem -> ../../archive/www.petitsurfeur.net/chain7.pem lrwxrwxrwx 1 root root 49 déc. 31 22:38 fullchain.pem -> ../../archive/www.petitsurfeur.net/fullchain7.pem lrwxrwxrwx 1 root root 47 déc. 31 22:38 privkey.pem -> ../../archive/www.petitsurfeur.net/privkey7.pem |
Avant de redémarrer le serveur Web, nous allons maintenant modifier le Virtual Host, après en avoir fait une copie bien sûr. Dans mon cas le fichier s’appelle petitsurfeurv3_site.conf et nous en allons le copier en petitsurfeurv3_site-le-ssl.conf.
1 2 |
$ cd /etc/apache2/sites-available $ cp petitsurfeurv3_site.conf petitsurfeurv3_site-le-ssl.conf |
Modifions maintenant le fichier et pensez à adapter les directives et liens :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<IfModule mod_ssl.c> <VirtualHost www.petitsurfeur.net:80> ServerAdmin admin@cybtech.net ServerName www.petitsurfeur.net ServerAlias petitsurfeur.net Redirect / https://www.petitsurfeur.net </VirtualHost> <VirtualHost www.petitsurfeur.net:443> ServerAdmin admin@xxx.net ServerName www.petitsurfeur.net ServerAlias petitsurfeur.net DocumentRoot /var/www/petitsurfeur_V3_site SSLCertificateFile /etc/letsencrypt/live/www.petitsurfeur.net/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.petitsurfeur.net/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.petitsurfeur.net/chain.pem SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire <Directory /> Options Indexes FollowSymLinks MultiViews AllowOverride None </Directory> <Directory "/var/www/petitsurfeur_V3_site"> Options FollowSymLinks MultiViews # Options Indexes FollowSymLinks MultiViews AllowOverride All # AuthType Basic # AuthName "Authentification Requise" # AuthUserfile "/etc/htpasswd/.htpasswd_dolibarr" # Require valid-user Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/petitsurfeur_V3_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/petitsurfeur_V3_access.log combined </VirtualHost> </IfModule> |
Nous pouvons maintenant redémarrer le serveur
1 |
$ systemctl stop apache2 |
Et vérifier sur SSL Labs
Renouvellement du certificat
Les certificats Let’s Encrypt expirent au bout de 90 jours et nous allons mettre en place un cron pour automatiser le renouvellement. Ce cron s’exécutera tous les mardis à 02h15
Créons la règle cron
1 2 |
$ cd /etc/cron.d $ vi certbot |
Avec la planification suivante :
1 2 3 4 5 6 |
# /etc/cron.d/certbot: crontab entries for the certbot package PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # Tous les mardis a 02h15 # Standalone 15 02* * 2 /usr/bin/certbot renew --pre-hook "systemctl stop apache2" --post-hook "systemctl start apache2" >> /var/log/certbot-renew.log |