Cet article est une mise à jour de l’article ssl avec letsencrypt et nginx et traite de la mise en place d’un serveur SSL (Secure Sockets Layer) et maintenant TLS (Transport Layer Security) avec Ubuntu 18.04 et Nginx.
On ouvre un terminal et l’on installe Let’s Encrypt :
1 2 3 4 5 6 |
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository universe $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install certbot python-certbot-nginx |
Mon domaine est murviel-info.com. Let’s Encrypt créera un dossier /.well-known dans le répertoire du domaine. Il faut autoriser la lecture et l’écriture dans le répertoire, interdit sur une configuration Nginx, le répertoire commençant par un point. On ajoute au fichier de configuration du domaine :
1 2 3 4 5 6 7 8 9 10 11 12 |
server { listen 80; server_name murviel-info.com www.murviel-info.com; root /path/to/www/folder; location ~ /\.well-known { allow all; } ... } |
On peut alors installer le certificat SSL/TLS :
1 |
$ sudo letsencrypt certonly --webroot -w /path/to/www/folder -d murviel-info.com -d www.murviel-info.com |
Letsencrypt a une limitation de 5 échecs par compte, par hostname et par heure, alors pour faire un test en obtenant des certificats invalides sans les enregistrer, on ajoute --dry-run à la commande.
Pour renouveler les certificats venant à terme, on lance :
1 2 3 4 5 6 7 |
$ sudo certbot renew Processing /etc/letsencrypt/renewal/murviel-info.com.conf The following certs are not due for renewal yet: /etc/letsencrypt/live/murviel-info.com/fullchain.pem (skipped) No renewals were attempted. |
Ici, le certificat n’est pas sur le point d’expirer. On peut donc créer une tâche récurrente crontab pour renouveler automatiquement les certificats.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo crontab -e # Edit this file to introduce tasks to be run by cron. # # ... # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 30 3 1 * * cerbot renew >> /var/log/letsencrypt |
La commande est lancée tous les dimanches à 3h.
Pour lister tous les certificats que l’on a généré et les domaines concernés, on tape la commande :
1 |
$ sudo certbot certificates |
Étendre un certificat à un sous-domaine
Si l’on a oublié un certificat pour un sous-domaine qui dépend du même répertoire .well-known
, par exemple pour un multi-site WordPress, on peut étendre ce dernier au sous-domaine. J’ai un certificat pour les sous domaines clionautes.murvielinfo.com
, cliotheque.murvielinfo.com
, clio-prepas.murvielinfo.com
et je veux l’étendre à clio-lycee.murvielinfo.com
, on utilise --expand
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ sudo certbot -d clionautes.murvielinfo.com, cliotheque.murvielinfo.com, clio-prepas.murvielinfo.com, clio-lycee.murvielinfo.com --expand certonly Saving debug log to /var/log/letsencrypt/letsencrypt.log How would you like to authenticate with the ACME CA? 1: Nginx Web Server plugin (nginx) 2: Spin up a temporary webserver (standalone) 3: Place files in webroot directory (webroot) Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1 Plugins selected: Authenticator nginx, Installer None Renewing an existing certificate Performing the following challenges: http-01 challenge for clio-lycee.murvielinfo.com Waiting for verification… Cleaning up challenges Running deploy-hook command: systemctl reload nginx |
On redemarre ensuite le serveur, nginx
dans mon cas.
1 |
$ sudo systemctl restart nginx |
Révoquer et Supprimer un certificat
1 |
$ sudo certbot revoke --cert-path /etc/letsencrypt/archive/domain.tld/cert1.pem |
Puis lancer la commande :
1 |
$ sudo certbot delete |
Et choisir le certificat à supprimer.
Lister les certificats et leurs validités
1 |
$ sudo certbot certificates |
Vérifier la version du client ACME et changer la version
On vérifie les fichiers de configuration dans le dossier /etc/letsencrypt/renewal
. Ce dossier contient les fichiers utilisés lors de la commande renew
.
Exemple d’un fichier de configuration pour le domaine murviel-info.com
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
cert = /etc/letsencrypt/live/murviel-info.com/cert.pem privkey = /etc/letsencrypt/live/murviel-info.com/privkey.pem chain = /etc/letsencrypt/live/murviel-info.com/chain.pem fullchain = /etc/letsencrypt/live/murviel-info.com/fullchain.pem version = 0.31.0 archive_dir = /etc/letsencrypt/archive/murviel-info.com # Options and defaults used in the renewal process [renewalparams] authenticator = webroot account = 2b663.........................bc server = https://acme-v01.api.letsencrypt.org/directory renew_hook = systemctl reload nginx [[webroot_map]] murviel-info.com = /var/www/murviel-info.com www.murviel-info.com = /var/www/murviel-info.com |
Pour utiliser le protocole acme v02
, il suffit de changer dans l’adresse du serveur acme-v01
en acme-v02
.
Et hop, le domaine dispose du chiffrage SSL/TLS et est accessible en https sur un serveur Ubuntu/Nginx.