Lets encrypt
INFORMATIONS GENERALES[modifier]
Let's Encrypt est une autorité de certification reconnue, comme GlobalSign ou GeoTrust, à la différence que celle-ci est entièrement gratuite et automatisée. Le certificat et la clé privée sont générés et validés par l'intermédiaire de l'outils certbot.
Pour valider que l'administrateur du serveur est le proriétaire légitime d'un domaine, certbot va générer un fichier dont le nom et le contenu est aléatoire dans le répertoire ".well-known/acme- challenge" de chaque site à certifier. Un serveur distant va ensuite faire une requête HTTP/HTTPS sous la forme http(s)://domaine.tld/.well-known/acme-challenge. Si le fichier renvoyé est le même que celui généré, cela prouve qu'une entrée DNS valide pointe vers ce serveur.
Let's Encrypt impose certaines limitations :
- un certificat généré n'est valide que 3 mois - pas plus de 20 TENTATIVES de générations de certificats par semaine (la limite était de 5 au lancement du service) - tous les sous-domaines à certifier doivent être indiqués lors de la génération (*.domaine.tld n'est pas autorisé)
La procédure ci-dessous explique sa mise en place avec Apache, mais ce service fonctionne avec n'importe quel serveur Web. Le certificat généré peut aussi être utilisé dans d'autres services comme SMTP.
I - Installation de Certbot[modifier]
Création du répertoire Let's EncryptBR {{{mkdir -p /opt/agarik/letsencrypt/.well-known/acme-challenge}}} BRBR Centos version 6.x ou inférieure : {{{cd /opt/agarik/scripts wget https://dl.eff.org/certbot-auto -O '/opt/agarik/letsencrypt/certbot' chmod +x '/opt/agarik/letsencrypt/certbot'}}} BR Centos version 7 ou supérieure {{{yum install epel-release yum install python-certbot-apache}}} BR Envoyer le fichier attachment:cli.ini dans le répertoire /opt/agarik/letsencrypt
II - Mise en place du challenge[modifier]
Sur chaque VHost où let's encrypt sera utiliser, ajouter un directory acme-challenge : {{{Alias /.well-known/acme-challenge/ "/opt/agarik/letsencrypt/.well-known/acme-challenge/" <Directory "/opt/agarik/letsencrypt/.well-known/acme-challenge/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>}}} graceful d'Apache : {{{service httpd graceful}}}BR Créer un fichier test dans /opt/agarik/letsencrypt/.well-known/acme-challenge/BR {{{echo 'test agarik' > /opt/agarik/letsencrypt/.well-known/acme-challenge/index.html}}}BR Vérifier qu'il est accessible sur les différents sites qui utiliseront let's encrypt:BR http://domaine.tld/.well-known/acme-challenge/index.html
Les sites peuvent être en http ou https, cela ne fait aucune différence.BR Le VHost peut utiliser un certificat expiré ou auto-signé, ça ne gène pas le processus.
Éditer /opt/agarik/letsencrypt/cli.ini et ajouter tous les domaines et alias configuré.
III - Génération du certificat[modifier]
Exécuter la commande suivante pour générer le certificat :BR {{{/opt/agarik/letsencrypt/certbot certonly -c /opt/agarik/letsencrypt/cli.ini}}}BR A la première exécution, l'outils demande si vous souhaitez donner votre adresse e-mail à l'EFF.BR Répondre (N)on.
Si l'exécution a fonctionné, le message suivant apparaît : {{{IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/vosky.fr/fullchain.pem. Your cert will expire on 2017-10-22. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le}}}
En cas de domaines multiples une directive domains par domaine est ajouté ou séparé par une virgule. Dans le cas contraire, revérifier que chaque domaine listé dans le fichier attachment:cli.ini a son URI .well-known/acme-challenge/ accessible.BR Bien faire les vérifications avant de réessayer car le nombre d'exécution de la commande certbot est limitée dans le temps.
Le certificat généré se trouve dans /etc/letsencrypt/live/domaine1.tldBR Le nom du répertoire porte le nom du premier domaine listé dans le fichier attachment:cli.ini mais le certificat contient les informations de tous les domaines.
IV - Ajout du certificat dans Apache[modifier]
Pour chaque VHost ayant été validé par Let's Encrypt, ajouter les options suivantes : {{{SSLCertificateChainFile /etc/letsencrypt/live/domaine1.tld/chain.pem SSLCertificateFile /etc/letsencrypt/live/domaine1.tld/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/domaine1.tld/privkey.pem}}}
Redémarrer Apache et vérifier que les sites en HTTPS utilisent un certificat Let's Encrypt valide.
Pour les services où il n'est pas possible de différencier le certificat de la chaine de certification, utiliser le fichier fullchain.pem à la place de cert.pem.
IV - Ajout d'une tâche planifiée[modifier]
Le certificat généré n'étant valide que 3 mois, il est fortement recommendé de mettre en place une cron pour le renouveler automatiquement. Ajouter dans /etc/crontab :BR {{{0 0 0 * * root /opt/agarik/letsencrypt/certbot certonly -c /opt/agarik/letsencrypt/cli.ini && service httpd graceful}}}
Le redémarrage d'Apache est important car sinon l'ancien certificat est toujours utilisé.