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.
$ 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.
$ systemctl stop apache2
Vérifions si le port 80 est actif :
$ 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.
$ 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.
$ 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.
$ 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 :
<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
$ 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
$ cd /etc/cron.d $ vi certbot
Avec la planification suivante :
# /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
