Chronique de l'AdminSys - 1 : Utiliser Let's Encrypt

Les présentations :

Let's Encrypt est une autorité de certifications ssl gratuite, automatique, et ouverte. Soutenu et sponsorisé par des organismes comme l'EFF, Fondation Mozilla, Akamai, Cisco et pleins d'autres. Et n'est absolument pas à but lucratif (au contraire).

Le logiciel

letsencrypt est un soft écrit en python permettant la gestion, et les requêtes de vos certificats.

Choses à savoir

Pour le moment le service est en Open Beta (08/12/2015) et dispose de quelques limitations :

  • 5 certificats par domaine pour 7 jours
  • certificat valable 90jours
  • Pas de wildcard

Mais pour compenser, on peut faire un certificat multi-domaine.
Le premier domaine que vous donnerez servira comme base de nom de fichier pour le certificat. Le certificat pourra être utilisé pour tous les sous-domaines demandé à condition que tous ces sous domaines pointent tous vers le domaine principal, sinon faudra bidouiller avec le mode Manuel

Ce tuto est plutôt prévu pour une utilisation sur VPS / Dédié accessible par internet, En tant que root.

On va utiliser l'option --standalone de letsencrypt qui permet une mise en place des certificats simple et peu invasive (pas de risque de péter vos fichiers de conf de votre serveur web) en contrepartie il faudra que votre serveur web soit éteint le temps pour que --standalone puisse utiliser les ports 80 et 443

C'est parti !!!

Download Let's Encrypt

cd ~  
wget https://github.com/letsencrypt/letsencrypt/archive/master.zip  
unzip master.zip  
rm master.zip  
mv letsencrypt-master letsencrypt  

Lancement de Let's Encrypt

Ensuite on va ce créer un script qui va s'occuper de lancer letsencrypt tranquillement.

mkdir -p ~/scripts  
nano ~/scripts/update_ssl.sh  

Ce qu'il faut mettre dans le script, remplacez bien la variable args par la liste de vos domaines à certifier et remplacez bien la variable serv par le nom de votre service web tournant sur les ports 80 et 443 (le plus souvent apache2 ou nginx)

#!/bin/bash
# ~/scripts/update_ssl.sh

# Liste de vos domaines à certifier
args="-d domaine1.tld -d domaine2.tld" # ...  
# service tournant sur le port 80 et 443 (http / https) devant être stoppé pour utiliser --standalone
serv='nginx'

service $serv stop  
~/letsencrypt/letsencrypt-auto certonly --standalone --renew-by-default $args
service $serv start  

Une fois que c'est OK rendez le fichier exécutable et lancez-le :

chmod +x ~/scripts/update_ssl.sh  
~/scripts/update_ssl.sh

Le premier lancement va prendre un peu de temps car letsencrypt-auto va vérifier ces dépendances, installer les paquets nécessaire, et vous demandera ensuite de rentrer une adresse mail, et d'accepter les TOS.

Une fois que c'est fini, si vous n'avez pas eu d'erreur, vous retrouverez votre certificat dans le dossier /etc/letsencrypt/live/{votre domaine principal (le premier domaine fourni)} en plusieurs parties.

Configuration de votre serveur web

à mettre dans vos conf vhost *:443 apache2 :

SSLEngine on  
SSLCertificateFile /etc/letsencrypt/live/domaine1.tld/cert.pem  
SSLCertificateKeyFile /etc/letsencrypt/live/domaine1.tld/privkey.pem  
SSLCertificateChainFile /etc/letsencrypt/live/domaine1.tld/chain.pem  
SSLCACertificateFile /etc/letsencrypt/live/domaine1.tld/fullchain.pem  
SSLVerifyClient none  

à mettre dans vos conf nginx :

#SSL Conf
listen 443 ssl;  
listen [::]:443 ssl;

ssl_certificate         /etc/letsencrypt/live/domaine1.tld/fullchain.pem;  
ssl_certificate_key     /etc/letsencrypt/live/domaine1.tld/privkey.pem;  
ssl_client_certificate  /etc/letsencrypt/live/domaine1.tld/cert.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
ssl_ciphers HIGH:!aNULL:!MD5;  

Automatisation par cron

Vu que le certificat ne sera valable que 3 mois, on va s'arranger pour qu'il soit renouvelé tous les 89jours avec cron : ouvrez cron : crontab -e et ajoutez la ligne suivante

0 0 */89 * * /bin/bash /root/scripts/updatecert.sh > /etc/letsencrypt/cron.log  

Sauvegardez et c'est fini.

Purexo

Developpeur et AdminSys sur Antarka

IN DA FACKIN KLOOD https://purexo.eu/