HTTPS Securisé avec Nginx
Générer des certificats SSL correctement configuré n’est pas aussi facile qu’il n’y parait !
Génération des certificats
Creation de l’autorité de certification (CA)
On commence par créer la clé, en 2048 sinon c’est pas suffisamment sécurisé :
openssl genrsa -des3 -out dumydomain-ca.key 2048
Puis on crée le certificat de la CA :
openssl req -new -x509 -days 3650 -key dumydomain-ca.key -out dumydomain-ca.crt
Valable 10 ans.
Création du certificat pour notre serveur
Dans cette procédure, le FDQN doit être exactement le même que le nom de domaine du serveur. Il est possible d’utiliser
des wildcard pour avoir un certificat multi-domaine : *.dumydomain.fr
Comme pour la CA on commence par créer la clé :
openssl genrsa -des3 -out dumydomain.fr.key 1024
Ensuite on crée la demande ce certificat :
openssl req -new -nodes -newkey rsa:2048 -keyout dumydomain.fr.key -out dumydomain.fr.csr -days 3650
Enfin on crée le certificat grace à l’autorité et la demande précédemment généré :
openssl x509 -req -in dumydomain.fr.csr -out dumydomain.fr.crt -sha256 -CA dumydomain-ca.crt -CAkey dumydomain-ca.key -CAcreateserial -days 365
Il est important d’utiliser SHA256 et non SHA1 car l’algo SHA1 n’est pas considéré comme suffisamment sur.
Configuration Nginx
Diffie Hellman Parameters
Il est nécessaire, pour éviter certaines failles de redéfinir les paramètres DH sur 2048 (cf. https://weakdh.org/sysadmin.html
openssl dhparam -out dhparams.pem 2048
Déplacer le fichier obtenu dans /etc/nginx/ssl
.
Configuration SSL
Déplacer les fichier de certificats et de clé dans le répertoire /etc/nginx/ssl
.
Dans /etc/nginx/conf.d
ajouter un fichier ssl.conf avec le contenu suivant :
ssl_certificate /etc/nginx/ssl/dumydomain.fr.crt;
ssl_certificate_key /etc/nginx/ssl/dumydomain.fr.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:10m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
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:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
Il ne reste plus qu’a activer SSL dans la configuration du server et de tester via SSLabs