Afin de sécuriser mes différents sites j’utilisais un certificat standard non certifié. Puis est venu Let’s Encrypt qui permet d’avoir un certification toujours à jour et valide.
Installation
J’ai choisi une installation depuis GitHub :
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt –depth=1
Pour mettre à jour l’outil un git pull est suffisant.
Configuration
J’ai utilisé un fichier de configuration pour lister mes domaines.
# We use a 4096 bit RSA key instead of 2048 rsa-key-size = 4096 email = your@email.com domains = domain.fr, sub.domain.fr 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/html
Ajouter la configuration pour vos sites Nginx
server { # .well-known doit resté accessible location ~ /\.well-known/acme-challenge { root /var/www/html/; try_files $uri /$1; allow all;; } # On interdit l'accès au dotfiles location ~ /\. { deny all; access_log off; log_not_found off; } }
Génération des clés
/opt/letsencrypt/letsencrypt-auto certonly --config /usr/local/etc/le-domaine-webroot.ini
Ajout du block serveur sécurisé dans vos sites Nginx
server { # spdy pour Nginx < 1.9.5 listen 443 ssl spdy; listen [::]:443 ssl spdy; spdy_headers_comp 9; # http2 pour Nginx >= 1.9.5 #listen 443 ssl http2; #listen [::]:443 ssl http2; server_name mondomaine.fr; root /var/www/mondomaine.fr; index index.html index.htm; error_log /var/log/nginx/mondomaine.fr.log notice; access_log off; #### Locations # On cache les fichiers statiques location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; } # On interdit les dotfiles location ~ /\. { deny all; } #### SSL ssl on; ssl_certificate /etc/letsencrypt/live/mondomaine.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mondomaine.fr/privkey.pem; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/mondomaine.fr/fullchain.pem; # Google DNS, Open DNS, Dyn DNS resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 216.146.35.35 216.146.36.36 valid=300s; resolver_timeout 3s; #### Session Tickets # Session Cache doit avoir la même valeur sur tous les blocs "server". ssl_session_cache shared:SSL:100m; ssl_session_timeout 24h; ssl_session_tickets on; # [ATTENTION] il faudra générer le ticket de session. ssl_session_ticket_key /etc/nginx/ssl/ticket.key; # [ATTENTION] Les paramètres Diffie-Helman doivent être générés ssl_dhparam /etc/nginx/ssl/dhparam4.pem; #### ECDH Curve ssl_ecdh_curve secp384r1; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK'; }
Génération des clefs utilisées pour les sessions et le Diffie-Helman
mkdir -p /etc/nginx/ssl && openssl rand 48 -out /etc/nginx/ssl/ticket.key && openssl dhparam -out /etc/nginx/ssl/dhparam4.pem 4096
Ajouter la ligne suivante dans votre crontab -e
30 3 * * 0 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/letsencrypt/renewal.log
Sources