Mes passions, le boulots, mes coups de gueule...




Nginx : Chiffrement HTTPS et SSL via une Autorité de Certification reconnue

Catégories : Geek, Informatique, Raspberry Pi · par 17 Jan 2015

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.


StartSSL-14

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 :

StartSSL-01

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.

StartSSL-07

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 :

StartSSL-21

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.