Le Hollandais Volant

Lets-encrypt / Certbot sur son PC pour un serveur distant

Je veux renouveler mon certificat pour mon site à l’aide de Let's-encrypt.
Ici, prenons le cas où je n’ai pas accès à la machine qui héberge le site et que je n’ai qu’un accès FTP et au cPanel (proposé sur beaucoup d’hébergements mutualisés).
On peut toujours générer un certificat : il suffit de lancer Let’s-encrypt sur son ordinateur, de générer les certificats et ensuite d’envoyer les certificats manuellement sur le site.

Je suis sous Linux Mint 19 (basé sur Ubuntu 18.04), et je fais tout en ligne de commandes.

Installation de Letsencrypt

Première chose, récupérer Lets-encrypt / Certbot :

sudo apt install certbot

Une fois fait, on peut commencer.

Production des certificats

La commande est letsencrypt.
On ne veut que le certificat, on ajoute certonly, et vu qu’on ne se trouve pas sur la machine qui accueille le site web, on doit se mettre en mode manuel avec --manual. Perso je met une sécurité à 4096 bits avec --rsa-key-size 4096 Ensuite on ajoute les domaines pour qui on veut un certificat. De plus, vu qu’il est préférable de ne pas se mettre en root, il faut spécifier les dossiers de travail avec --config-dir Bureau/certbot/c/ --work-dir Bureau/certbot/w/ --logs-dir Bureau/certbot/l/. Ce qui donne au final dans mon cas (pour mes 4 domaines) :

letsencrypt certonly --manual -d lehollandaisvolant.net -d couleur-science.eu -d neerden.eu -d science-abuse.net --rsa-key-size 4096 --config-dir Bureau/certbot/c/ --work-dir Bureau/certbot/w/ --logs-dir Bureau/certbot/l/

Il pose quelques questions, par exemple votre email (pour vous envoyer des rappels de mise à jour du certificat) ou à loger votre IP comme étant l’IP ayant demandé le certificat. J’accepte pour continuer.

Ensuite, il s’agit de prouver qu’on est bien le propriétaire du site pour lequel on demande un certificat. Ça se passe par la création d’un fichier sur notre site avec un contenu que Lets-encrypt nous donne.

En pratique, Lets-encrypt nous dit quelque chose comme ça :

-------------------------------------------------------------------------------
Create a file containing just this data:

laUEjmFg7JiLUO8FsOj9wXla1NZNo0rUVvwJb2ZJzeg.JWdDMrC7Wfgz0tKLLd5x5mO1kNuvCZ5ux3-y2ISt0QW

And make it available on your web server at this URL:

http://lehollandaisvolant.net/.well-known/acme-challenge/laUEjmFg7JiLUO8FsOj9wXla1NZNo0rUVvwJb2ZJzeg

-------------------------------------------------------------------------------
Press Enter to Continue

Il faut utiliser FTP (ou SSH ou autre) pour créer un fichier à la racine du site, qu’il nous dit de créer, dans mon cas :

/.well-known/acme-challenge/laUEjmFg7JiLUO8FsOj9wXla1NZNo0rUVvwJb2ZJzeg

Puis, utiliser un éditeur de texte pour ouvrir le fichier et y mettre le texte demandé, dans mon cas :

laUEjmFg7JiLUO8FsOj9wXla1NZNo0rUVvwJb2ZJzeg.JWdDMrC7Wfgz0tKLLd5x5mO1kNuvCZ5ux3-y2ISt0QW

Une fois que c’est fait, essayez d’accéder au fichier dans votre navigateur : le fichier doit être accessible (pas d’erreur 404 ou 403 ou autre).
Si ça marche, poursuivez dans le terminal avec la touche « Entrée ».

Si vous avez demandé plusieurs domaines différents, il faudra faire cette manip pour chaque domaine (attention, les codes aléatoires changent à chaque fois).

Quand c’est tout bon, Lets-encrypt a généré vos certificats. Ils se trouvent dans le dossier que j’ai spécifié dans la commande, c’est à dire Bureau/certbot.
Les fichiers importants pour nous sont dans c/live/<votre_site>/
Il y a 4 fichiers dedans : cert.pem, chain.pem, fullchain.pem, privkey.pem.

Installation des certificats

Pour l’installation des certificats, je passe par cPanel que me propose mon hébergeur. Il faut aller dans la section "SSL/TLS". On gère ensuite la liste des certificats et clés privés.

Il faut uploader sa clé privée (le fichier privkey.pem) dans le champ sur la section Private Keys, et le fichier du certificat (fullchain.pem) dans la section Certificates.

Les certificats sont uploadés maintenant, il reste à les installer.
Toujours dans cPanel, allez sur Install and Manage SSL for your site, puis choisissez le domaine. Cliquez ensuite sur « autofill by domain » pour pré-remplir les champs à l’aide des fichiers uploadés et enfin validez par « Install ».
Et là c’est bon : votre site est maintenant en HTTPS et fonctionne.

Cette dernière manip (choix du domaine et autofill) est à faire pour chacun de vos domaines.

Notes

N’oubliez pas de supprimer le dossier .well-known et son contenu : il n’y en a plus besoin.
Dans cPanel, supprimez aussi les vieux certificats devenus inutiles.
Les fichiers dans le dossier sur le bureau peuvent être supprimés également.

Souvenez-vous que le certificat expirera dans 90 jours, et il faudra refaire tout ça.
Vous recevrez de toute façon un e-mail de notification à l’adresse que vous avez renseigné lors de la génération des certificats.

Édit : pour les "wildcards"

Pour qu’un certificat fonctionnent sur lehollandaisvolant.net et sur les sous domaines *.lehollandaisvolant.net, il faut utiliser une commande spécifique :

letsencrypt certonly --manual -d *.lehollandaisvolant.net -d lehollandaisvolant.net -d *.neerden.eu -d neerden.eu -d couleur-science.eu -d science-abuse.net --rsa-key-size 4096 --config-dir Bureau/certbot/c/ --work-dir Bureau/certbot/w/ --logs-dir Bureau/certbot/l/ --server https://acme-v02.api.letsencrypt.org/directory

Ici, le serveur change (à la fin). Lors de la procédure, il faut (en plus de la vérification par les fichiers) utiliser une vérification par entrée DNS. Ce n’est pas compliqué, et c’est indiqué dans la procédure qui vient s’afficher à l’écran, mais faut savoir le faire.