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.
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 :
- 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émarré :
service pound start
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.