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'sencrypt 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

Letsencrypt 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 information :

  • 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 :

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émarrer :

service pound start
Nous avons désormais un certificat valide 90 jours signé et en place sur nos domaine 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éer 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:postmaster@kassianoff.fr)
postmaster@kassianoff.fr
Checking for new version...
Requesting root privileges to run letsencrypt...
   /root/.local/share/letsencrypt/bin/letsencrypt --text --email postmaster@kassianoff.fr --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.

Commentaires