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

Vous aimerez aussi...