Un petit howto pour certbot / nginx sur une debian testing, en date du 2016-05-04.
sudo -s mkdir /var/www/certbot
et un fichier
/etc/nginx/snippets/certbot.conf
contenant
location /.well-known/acme-challenge {
default_type "text/plain";
root /var/www/certbot;
}
Dans la config des domaines que tu veux gérer avec letsecnrypt, il faut inclure ce fichier de conf, qui fait donc un alias sur le port 80. Par exemple
server {
listen 80;
server_name host.domain.com;
include /etc/nginx/snippets/certbot.conf;
# config site ensuite
}
Recharger nginx, et demander le certificat (tu ne taperas cette commande qu'à la toute première création du certificat):
certbot certonly --agree-tos -a webroot --webroot-path=/var/www/certbot -d host.domain.com
Mettre à jour la config ssl de ce domaine:
ssl_certificate_key /etc/letsencrypt/live/host.domain.com/privkey.pem;
ssl_certificate /etc/letsencrypt/live/host.domain.com/fullchain.pem;
Note qu'avec nginx, il suffit de ne pas mettre d'ip pour utiliser SNI:
listen 443 ssl http2;
Ensuite pour renouveler le certificat, le paquet debian certbot a déjà installé une crontab quotidienne.
Et cerise sur le gateau, il faut regénérer dhparam.pem (attention ça prend quelques minutes):
openssl dhparam 4096 -out /etc/nginx/dhparam.pem
chmod 640 /etc/nginx/dhparam.pem
Voilà une config "green" des params ssl: /etc/nginx/conf.d/ssl.conf
# https://cipherli.st/
# https://bjornjohansen.no/optimizing-https-nginx
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
# warning: remove includeSubdomains; directive if some subdomains won't be served over https
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
ssl_stapling on;
ssl_stapling_verify on;
En fait ce sont ces requêtes qui font que les vendeurs de certificats SSL doivent supporter une infrastructure coûteuse ! L'OCSP stapling consiste à faire en sorte que ton serveur nginx serve de cache intermédiaire.
Le paquet debian certbot ajoute
/etc/cron.d/certbot
mais il faut que le serveur web recharge les certificats mis à jour !
certbot -q renew --post-hook "systemctl reload nginx"
corrige le problème.