Skip to content

Instantly share code, notes, and snippets.

@kapouer
Last active February 14, 2019 21:48
Show Gist options
  • Save kapouer/d3b2c424a4d86f398b4271c1f87045ba to your computer and use it in GitHub Desktop.
Save kapouer/d3b2c424a4d86f398b4271c1f87045ba to your computer and use it in GitHub Desktop.

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.

Et pour renouveler ?

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment