Let’s Encrypt certificat gratuit et valide

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  :

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 :

service pound stop

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

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

Pour informations :

Le résultat doit être celui-ci :

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 :

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

Nous avons donc les fichiers suivants :

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 :

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 :

Cert "/etc/pound/kassianoff.pem"

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

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  :

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

Il suffit ensuite de rendre exécutable le script :

chmod +x letsencrypt-pound.sh

Puis :

./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 : 

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 :

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 :

docker stop mon_conteneur

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

./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.