Let’s Encrypt certificat gratuit et valide

Let’s Encrypt certificat gratuit et valide
Jérémie Kassianoff
25 avril 2016
6 min de lecture

Dans une démarche de protection de vos domaines optez pour Let's encrypt ! Découvrez comment l'utiliser simplement pour générer vos certificats.

Cas d'usage concret

Vous voulez chiffrer vos domaines sans payer de certificat commercial : découvrez comment mettre en place Let's Encrypt.

Let’s Encrypt certificat gratuit et valide

Le certificat SSL est un élément de confiance indispensable depuis les révélations d’Edward Snowden en 2013. De plus les sites sécurisés sont favorisés dans les résultats de recherche. Dans notre cas nous utiliserons le service Let’s encrypt qui est open-source (Github) et financé par des grands noms du web comme Mozilla par exemple.

Info : Dans cet article, nous utiliserons notre certificat SSL avec le reverse proxy Pound et nous faciliterons le renouvellement du certificat (car il n’est valide que 90 jours).

Un service simple d’usage

Dans tout les cas d’usage Let’s encrypt requiert un pré-requis avant son déploiement. Le champs A de votre domaine (ou sous domaine) devra être redirigé vers le serveur qui utilisera le/les certificats. Ensuite nous allons récupérer les sources du projet via git et nous nous rendons dans son répertoire  :

bash
git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt

Let’s encrypt requiert que les ports http et https ne soit pas en écoute sur le serveur, arrêtons donc le service Pound :

bash
service pound stop

Voici un exemple d’usage pour la génération des certificats avec le domaine principal et un seul sous domaine :

bash
./letsencrypt-auto --standalone certonly -d kassianoff.fr -d www.kassianoff.fr --rsa-key-size 4096

Pour informations :

  • certonly : il permet de générer seulement le certificat et ses clés dans le répertoire /etc/letsencrypt/live/.
  • -d (ou –domains) : il permet de passer les domaines et sous domaines en argument.
  • –rsa-key-size :  taille de la clé RSA est de 4096 bits (par défaut en 2048 bits : non recommandé).

Le résultat doit être celui-ci :

bash
Requesting root privileges to run letsencrypt...
   /root/.local/share/letsencrypt/bin/letsencrypt --standalone certonly -d kassianoff.fr -d www.kassianoff.fr --rsa-key-size 4096

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/kassianoff.fr/fullchain.pem. Your cert will
   expire on 2016-07-24. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Une fois réussi, notre certificat est donc disponible dans le dossier kassianoff.fr :

bash
cd /etc/letsencrypt/live/kassianoff.fr/

Nous avons donc les fichiers suivants :

bash
cert.pem  chain.pem  fullchain.pem  privkey.pem

Les deux fichiers qui nous intéressent sont privekey.pem et cert.pem que nous allons concaténer pour Pound :

bash
cat /etc/letsencrypt/live/kassianoff.fr/privkey.pem /etc/letsencrypt/live/kassianoff.fr/fullchain.pem > /etc/pound/kassianoff.pem

Pour que cela fonctionne, ajoutons dans le fichier de configuration de pound /etc/pound/pound.cfg :

bash
Cert "/etc/pound/kassianoff.pem"

Le service Pound peut ensuite être démarré :

bash
service pound start

Nous avons désormais un certificat valide 90 jours signé et en place sur nos domaines et notre sous domaine !

Création ou renouvellement simplifié

Il faut avouer que posséder un certificat avec Let’s encrypt c’est pratique. Cependant il peut être intéressant de créer et de renouveler encore plus simplement ses certificats. Dans mon cas j’ai créé mon propre script  :

bash
git clone https://github.com/ffonaissak/letsencrypt-pound.git && cd letsencrypt-pound

Il suffit ensuite de rendre exécutable le script :

bash
chmod +x letsencrypt-pound.sh

Puis :

bash
./letsencrypt-pound.sh

Une erreur peut se produire si par exemple un autre service écoute sur le port http ou https, comme par exemple dans le cas présent un conteneur Docker :

bash
The program docker (process ID 5427) is already listening on TCP port 80. This
will prevent us from binding to that port. Please stop the docker program
temporarily and then try again.
-------------------------------------------------------------------------------
Press Enter to Continue
At least one of the (possibly) required ports is already taken.
cat: /etc/letsencrypt/live/kassianoff.fr/privkey.pem: No such file or directory
cat: /etc/letsencrypt/live/kassianoff.fr/fullchain.pem: No such file or directory
[....] Starting reverse proxy and load balancer: poundstarting...
. ok

Pour résoudre ce problème temporaire avant le déploiement de mon patch, localiser le service :

bash
ps aux | grep "5427"
root      5427  0.0  0.1 116292 11672 ?        Sl   18:45   0:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.72 -container-port 80

Docker monopolise le port http avec un conteneur en cours d’utilisation, arrêtons le :

bash
docker stop mon_conteneur

Il suffit de ré-exécuter le script comme cela :

yaml
./letsencrypt-pound.sh
Your first domain (ex:kassianoff.fr)
kassianoff.fr
Your second domain (ex:www.kassianoff.fr)
www.kassianoff.fr
Your third domain (ex:www2.kassianoff.fr)
www2.kassianoff.fr
You domains are : [kassianoff.fr] [www.kassianoff.fr] [www2.kassianoff.fr], Do you want to continue ? [Y/N]
Y
Cloning into 'letsencrypt'...
remote: Counting objects: 34827, done.
remote: Total 34827 (delta 0), reused 0 (delta 0), pack-reused 34827
Receiving objects: 100% (34827/34827), 9.30 MiB | 6.53 MiB/s, done.
Resolving deltas: 100% (24741/24741), done.
[ ok ] Stopping reverse proxy and load balancer: pound.
Your email contact for the certificat (ex:[email protected])
[email protected]
Checking for new version...
Requesting root privileges to run letsencrypt...
   /root/.local/share/letsencrypt/bin/letsencrypt --text --email [email protected] --domains kassianoff.fr -d www.kassianoff.fr -d www2.kassianoff.fr --agree-tos --standalone certonly --rsa-key-size 4096

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/kassianoff.fr/fullchain.pem. Your
   cert will expire on 2016-07-24. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

[....] Starting reverse proxy and load balancer: poundstarting...
. ok

Bien que mon script soit encore jeune et rencontre quelques bugs, je souhaite améliorer mon code !
N’hésitez pas à me faire part de vos commentaires.J’espère que cet article vous aura permis de sécuriser vos domaines.

Conclusion

Cet article a montré comment générer un certificat SSL gratuit et valide avec Let’s Encrypt, en l’intégrant au reverse proxy Pound, ainsi qu’un script personnel facilitant la création et le renouvellement des certificats tous les 90 jours. Cette solution open-source rend le chiffrement SSL accessible à tous, sans coût de licence, ce qui ne laisse plus d’excuse pour ne pas sécuriser ses domaines. Le script présenté reste perfectible et pourra encore évoluer pour corriger quelques bugs restants.