Let's Encrypt
Posted on sam. 24 novembre 2018 in System
It’s free, automated, and open
Let's Encrypt est une autorité de certification lancée le 3 décembre 2015 (Bêta Version Publique). Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d'un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sécurisation des sites internet.
Fonctionnement
Il vérifie l'identité du domaine choisi via une clé publique. Lors de la première utilisation pour ce domaine, il génère donc une paire de clé (privée/publique). Il va ensuite utiliser une URL connu afin de vérifie les clés. Let's ecnrypt mets un fichier à se chemin qui sera ensuite signé par l'agent local via la clé privée générée précédemment. Il notifie ensuite l'autorité que le fichier est signé et peut donc être vérifié. Il vérifie la signature ainsi que le contenu en le téléchargeant. Si tout correspond, il autorise alors la délivrance du certificat.
Mise en place
La meilleurs manière d'avoir le client est de le récupérer directement depuis leur dépôt GitHub officiel. Vous aurez ainsi la dernière version stable disponible et vous pourrez le mettre à jour rapidement via la commande git pull
.
cd /tmp
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
Site Web
Il est recommandé d'arrêter votre serveur web actuel (Apache2, nginx, litghthhtp) avant de lancer la demande de certificat. Cela vous permettra de faire ce dernier sans soucis et de modifier la configuration relative au site pour y ajouter le certificat ainsi généré.
./letsencrypt-auto certonly --rsa-key-size 4096 -d domail.tld
Nginx
server {
listen 443 ssl default_server;
server_name my-domain;
ssl_certificate /etc/letsencrypt/live/my-domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-domain/privkey.pem;
...
}
./letsencrypt-auto certonly --rsa-key-size 4096 -d mail.domain.tld --email contact@domain.tld --agree-tos
Si votre serveur gère plusieurs nom de domaines, il faut rajouter l'ensemble des domaines suivant sous la même forme : -d mail.domain2.tld
.
Postfix
# vim /etc/postfix/main.cf
smtp_tls_CAfile = /etc/letsencrypt/live/mail.domain.tld/chain.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.domain.tld/cert.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.domain.tld/privkey.pem
Dovecot
# vim /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/letsencrypt/live/mail.domain.tld/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.domain.tld/privkey.pem
Renouvellement automatique
#!/bin/sh
service nginx stop # or whatever your webserver is
/path/to/letsencrypt-auto renew -nvv --standalone > /var/log/letsencrypt/renew.log 2>&1
LE_STATUS=$?
service nginx start # or whatever your webserver is
if [ "$LE_STATUS" != 0 ]; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
# We use a 4096 bit RSA key instead of 2048
rsa-key-size = 4096
email = mail@domain.tld
domains = domain.tld,www.domain.tld
authenticator = webroot
# This is the webroot directory of your domain in which
# letsencrypt will write a hash in /.well-known/acme-challenge directory.
webroot-path = /var/www/letsencrypt/domain.tld/
location '/.well-known/acme-challenge' {
root /var/www/domain.tld/;
try_files $uri /$1;
}