Certificat
L'installation du certificat nécessite d'avoir:
- un certificat SSL signé par un organisme reconnu.
- une clé privée (.pem)
- un certificat "fullchain" (concaténation entre certificat + certificat intermédiaire)
lets encrypt
Obtenir le certificat
Pour obtenir un certificat de manière gratuite, nous allons utiliser let's encrypt.
sudo systemctl stop nginx
sudo certbot certonly --standalone -d votredomaine.com
sudo systemctl start nginx
Nous avons maintenant les certificats nécessaires:
- Clé privée : /etc/letsencrypt/live/votredomaine.com/privkey.pem
- Certificat fullchain : /etc/letsencrypt/live/votredomaine.com/fullchain.pem
Ajouter www-data au groupe ssl-cert (ce groupe a accès aux certificats Let's Encrypt)
sudo usermod -aG ssl-cert www-data
Donner les bonnes permissions aux certificats
sudo chown -R root:ssl-cert /etc/letsencrypt/live /etc/letsencrypt/archive
sudo chmod -R 750 /etc/letsencrypt/live /etc/letsencrypt/archive
Changer les permissions des fichiers
sudo chmod 640 /etc/letsencrypt/live/votredomaine.com/privkey.pem
sudo chmod 640 /etc/letsencrypt/live/votredomaine.com/fullchain.pem
Mettre à jour la configuration Nginx
sudo nano /etc/nginx/sites-available/toriphone
#exemple de configuration
server {
listen 443 ;
listen [::]:443 ;
server_name votredomaine.com;
access_log /var/log/nginx/wazo.access.log;
error_log /var/log/nginx/wazo.error.log;
root /var/www/html;
include /etc/nginx/locations/https-enabled/*;
gzip off; # gzipping SSL encripted data is a waste of time
ssl on;
fastcgi_param HTTPS on;
ssl_certificate /etc/letsencrypt/live/votredomaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/votredomaine.com/privkey.pem;
ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:!SEED:+HIGH:+MEDIUM;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_protocols TLSv1.2 TLSv1.3;
#add_header Strict-Transport-Security "max-age=31536000";
}
Activer le vhost et redémarrer Nginx
sudo ln -s /etc/nginx/sites-available/toriphone /etc/nginx/sites-enabled/
sudo systemctl reload nginx
Automatiser le renouvellement
Let's Encrypt renouvelle les certificats automatiquement, donc il faut que ces permissions soient réappliquées après chaque renouvellement. Ajoute un hook dans Certbot :
sudo certbot renew --deploy-hook "chmod 640 /etc/letsencrypt/live/votredomaine.com/privkey.pem && chmod 640 /etc/letsencrypt/live/votredomaine.com/fullchain.pem"