J’ai longtemps utilisé des certificats auto-signés pour mes connexions SSL/TLS, bien qu’un tel certificat assure le cryptage de la liaison, elle n’assure en aucun cas la validité de celui-ci. Lorsque c’est moi qui accède à un de mes sites, aucun problème (je peux encore me faire confiance je pense ^.^), mais quid des personnes tiers utilisant mes services? Elles ne peuvent se fier qu’à mes paroles. De plus un certificat auto-signé n’étant pas reconnu par les navigateurs, ceux-ci affichent cette page flashy indiquant les dangers d’accéder à un tel site.
D’un autre coté, un certificat délivré par une autorité compétente a un prix (plus ou moins variable). La solution intermédiaire est offerte par StartSSL, une société qui possède une offre gratuite de certificat SSL appelée Class 1 SSL. C’est un vrai certificat, certe basique et pour une utilisation personnelle, mais reconnu par les navigateurs, donc plus de page d’avertissement de ceux-ci avant de naviguer sur un site sécurisé. Celui-ci est gratuit, avec toutes vos informations d’identité, mais celles-ci ne sont pas vérifiées par StartSSL, donc c’est certainement un point délicat dans le cas d’un site d’e-commerce par exemple. Mais pour simplement sécuriser des pages d’administration, un back-office, c’est amplement suffisant.
Voici décrite ci-dessous la procédure de création et mise en place d’un certificat SSL pour Nginx.
Enregistrement et création du certificat StartSSL
Le site en question est donc startssl.com. Il faut se rendre sur le Control Panel à cette URL: https://startssl.com/?app=12 puis cliquer sur Express Lane pour directement créer un certificat gratuit.
A noter que le certificat Class 1 SSL est attaché à votre identité personnelle, il ne peut donc pas être utilisé pour une société, il faudra dans ce cas passer au certificat Class 2 (payant).
Après vérification d’un code par email, il est temps de générer une clé privée qui servira à se connecter au Control Panel. Il est préférable de choisir 2048 (High Grade) pour un chiffrement plus fort. Lorsque celle-ci est générée, elle sera installée dans le navigateur utilisé.
Il est fortement recommandé de la sauvegarder, ne serait-ce que pour pouvoir être importée dans d’autres navigateurs. Voici comment faire pour Chrome :
- Chrome -> Settings -> Show Advanced Settings… -> SSL -> Manage certificates…
- Sélectionner le certificat en question, cliquer sur Exporter
- Choisir d’exporter également la clé privée
- Renseigner un mot de passe (fort)
- Garder cette clé précieusement
En résulte un fichier .pfx
. Sous Firefox :
- Open menu -> Options -> Advanced -> Certificates -> View certificates
- Sélectionner le certificat en question, cliquer sur Backup
- Renseigner un mot de passe (fort)
- Garder cette clé précieusement
A noter que pour importer un certificat .pfx
dans Firefox il faudra certainement le renommer en .p12
au préalable.
Il est maintenant possible de se connecter au Control Panel de StartSSl et d’ajouter le nom de domaine. Une phase de vérification par email vers une adresse en postmaster@domaine.net ou hostmaster@domaine.net est nécessaire.
Passé cette étape, on entre dans la création de la clé privée pour notre serveur. Un mot de passe est demandé, encore une fois choisir quelque chose de long et le plus random possible.
La clé est générée, il faut la sauvegarder dans un endroit sur avec pour nom quelque chose comme ssl.key
.
La procédure continue, il faut choisir le domaine en question créé auparavent et choisir un sous-domaine qui sera associé au certificat. Celui-ci peut etre www
, ssl
, le nom d’hôte de la machine ou ce que vous voulez. Lorsque ceci est fait un message vous indique que le certificat est en cours de création mais doit être validé par un membre du staff de StartSSL. Dans mon cas, cela a pris moins de 30 minutes avant de recevoir un email (sur l’adresse postmaster@domaine.net) m’indiquant que le certificat était prêt.
Pour récupérer le certificat dans les méandres du site, il faut :
- Se connecter au Control Panel
- Aller dans Tool Box
- Puis, cliquer sur Retrieve Certificate
- Sauvegarder le fichier ssl.crt
La procédure est maintenant terminée sur le site StartSSL. Mais avant de le quitter, il faut prendre soin de télécharger les deux fichiers sub.class1.server.ca.pem et ca.pem qui seront nécessaires pour l’installation sur le serveur :
Ajouter le certificat à Nginx
La première étape est de placer nos fichiers sur le serveur est question, pour rappel, il y a 4 fichiers : ssl.key
, ssl.crt
, sub.class1.server.ca.pem
et ca.pem
.
On peut décrypter le fichier ssl.key
avec la commande openssl
comme ceci :
openssl rsa -in ssl.key -out /etc/nginx/conf.d/ssl.key
L’étape suivant consiste à concaténer notre certificat ssl.crt avec les certificats racines sub.class1.server.ca.pem et ca.pem :
cat ssl.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/conf.d/ssl-unified.crt
A ce stade, afin d’éviter que plus tard Nginx ne crie (*), on va ouvir le fichier ssl-unified.crt et s’assurer qu’il n’y a pas une ligne ressemblant à ceci :
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
Si tel est le cas, ajouter un retour ligne pour obtenir ceci :
-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----
Il ne reste plus qu’à mettre à jour la configuration de Nginx. Si cette configuration a été pensée modulable comme décrite dans ce précédent article, je n’ai qu’à éditer le fichier /etc/nginx/global/https.conf
comme ceci :
listen 443 ssl; ssl_certificate /etc/nginx/conf.d/ssl-unified.crt; ssl_certificate_key /etc/nginx/conf.d/ssl.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5;
Vérification que la configuration est bonne :
nginx -t
Si tout va bien, redémarrage de Nginx :
systemctl restart nginx.service
Voici ce que cela donne dans Chrome lorsque j’accède à https://rholala.net :
(*) L’erreur pouvant apparaitre dans ce cas ressemble à ceci : PEM_read_bio_X509_AUX(« /etc/nginx/conf.d/ssl-unified.crt ») failed (SSL: error:0906D066:PEM routines:PEM_read_bio:bad end line) et Nginx ne démarre pas.