Edit 2016-12-17 :
Suite aux problèmes rencontrés par StartSSL, j’ai publié un nouveau billet décrivant la marche à suivre pour utiliser des certificats générés par Let’s Encrypt.
Dans un récent billet, j’avais détaillé la marche à suivre pour utiliser un certificat auto-signé sur un serveur Nginx utilisant HTTPS et SSL.
Cette procédure avait l’inconvénient majeur d’afficher un très vilain message d’alerte à l’attention de l’utilisateur l’informant de la possibilité d’être en présence d’un site malveillant.
En effet, le certificat n’étant pas signé par une autorité reconnue, le navigateur ne pouvait pas garantir la sécurité du site à l’utilisateur.
Pour remédier à ce problème, nous allons passer par une Autorité de Certification (CA) pour signer notre certificat.
Il en existe de nombreuses, mais leurs services sont généralement payants. Nous allons ici détailler la procédure pour obtenir un certificat de base gratuit chez StartSSL.
Inscription
Tout d’abord, nous allons nous rendre sur le site StartSSL et remplir le formulaire d’inscription :
Cette étape peut prendre plusieurs heures car la validation se fait manuellement par une personne qui vérifiera la cohérence des données.
Lorsque ce sera fait, vous recevrez un mail contenant un code. Procédez alors aux étapes suivantes :
A la différence d’une inscription sur un site classique avec login / mot de passe, ce site va utiliser un certificat avec une clef personnelle qui sera stockée dans le navigateur. Lors de vos prochaines connexions, ce certificat sera utilisé pour vous identifier.
Ici, sur Firefox, on peut visualiser le certificat dans : Firefox / Préférences / Avancé / Certificats / Afficher les certificats / Vos certificats.
Faites-en une sauvegarde car si vous le perdez, c’est foutu !
Validation d’une adresse email
Les étapes suivantes sont classiques. Entrez une adresse mail et un code y sera envoyé.
Une fois reçu, introduisez-le dans le formulaire.
Validation d’un domaine
Reste maintenant à prouver que vous êtes bien le détenteur du site associé au nom de domaine.
Pour cela, StartSSL va procéder à une vérification email vers une adresse associée au détenteur : postmaster@domaine.tld, hostmaster@domaine.tld, webmaster@domaine.tld, …
Ces adresses sont généralement redirigées vers une de vos adresses principales.
Création des certificats
Passons maintenant à la phase de création des certificats SSL pour Nginx :
Intégrations à Nginx
Il est temps maintenant d’installer les clefs et certificats sur notre serveur. La procédure est en partie décrite dans la FAQ de StartSSL.
On commence par créer un dossier dans lequel on va placer les clefs et le certificat.
$ sudo mkdir /etc/nginx/ssl/ $ cd /etc/nginx/ssl/
On y copie la clef ssl.key
et le certificat ssl.crt
qui ont été générés par StartSSL.
On décrypte la clef :
$ openssl rsa -in ssl.key -out ssl.key
On protège la clef en réservant les droits de lecture/écriture uniquement au propriétaire :
$ chmod 600 ssl.key
On récupère le CA racine et les certificats serveur intermédiaire CA de classe 1 :
$ wget http://www.startssl.com/certs/ca.pem $ wget http://www.startssl.com/certs/sub.class1.server.ca.pem
On crée un certificat unifié à partir de votre certificat personnel et des certificats CA :
$ cat ssl.crt sub.class1.server.ca.pem ca.pem > ssl-unified.crt
Dans mon cas, le certificat n’a pas été accepté tout de suite par Nginx. Il manquait un retour à la ligne dans le fichier ssl-unified.crt
entre la fin du certificat précédent et le début du suivant.
On avait :
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
Au lieu de :
-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----
On édite le fichier de configuration de Nginx pour y intégrer les paramètres SSL :
server { listen 443 ssl; ssl on; ssl_certificate /etc/nginx/ssl/ssl-unified.crt; ssl_certificate_key /etc/nginx/ssl/ssl.key; La suite des paramètres ici }
Et on redémarre Nginx :
$ sudo service nginx restart
Si tout s’est bien passé, Nginx ne devrait pas afficher d’erreur.
Lors de la connexion au serveur, le navigateur devrait afficher quelque chose comme ceci :