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;

    ...
}

Mail

./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;
}