16-09
2011

Créer et Installer un certificat SSL sous NGinx

NGinx Installer un certificat SSL sur NGinx est l'affaire de quelques minutes. Dans cet exemple, j'ai choisi NameCheap comme fournisseur de Certificat SSL. Les certificats SSL de type GeoTrust RapidSSL sont au prix de 10.95 USD (~7.95 €uros au moment de ce billet).

Préparation des certificats SSL

Rendez-vous sur votre serveur:

cd /etc/nginx/
# Création d'un dossier ssl pour y mettre les certificats
mkdir ssl
cd ssl/

Génération des certificats:

# Génération du fichier .key
openssl genrsa -des3 -out admin-serv.net.key 2048

Generating RSA private key, 2048 bit long modulus
...+++
..................................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for admin-serv.net.key:
Verifying - Enter pass phrase for admin-serv.net.key:

Votre fichier .key (protégé par mot de passe) est maintenant créé, nous passons à la génération du CSR:

openssl req -new -key admin-serv.net.key -out admin-serv.net.csr
# Votre mot de passe saisi plus haut:
Enter pass phrase for admin-serv.net.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Admin Serveur
Organizational Unit Name (eg, section) []:Admin Serveur
# C'est la seule question réellement importante
# Elle doit correspondre exactement à votre domaine à sécuriser
Common Name (eg, YOUR name) []:admin-serv.net
Email Address []:postmaster@admin-serv.net

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Votre fichier CSR est désormais créé. Nous allons toutefois en profiter pour déprotéger le fichier KEY afin que NGinx puisse se relancer par la suite tout seul. Vous pouvez en profiter pour vérifer les informations saisies:

openssl req -noout -text -in admin-serv.net.csr
[...]
Subject: C=FR, ST=France, L=Paris, O=Admin Serveur, OU=Admin Serveur, CN=admin-serv.net/emailAddress=postmaster@admin-serv.net
[...]

Déprotection de la clé

openssl rsa -in admin-serv.net.key -out admin-serv.net.deprotected.key
Enter pass phrase for admin-serv.net.key:
writing RSA key

Votre clé n'a maintenant plus de mot de passe bloquant qui aurait gêné un restart de NGinx.

Soumission à NameCheap

Rendez-vous sur NameCheap, dans la section Certificat SSL. Je vous recommande le "RapidSSL Domain Validated" qui nécessite uniquement une validation par email. C'est rapide et simple.

NameCheap va vous demander votre CSR et le type de votre serveur Web. NGinx n'étant pas indiqué vous pouvez mettre n'importe quoi, personnellement je mets Apache 2. Sélectionnez ensuite une adresse email que vous pouvez vérifier, un lien de confirmation vous conduisant chez GeoTrust vous sera transmis.

Cliquez sur ce lien, vous allez, dans les secondes qui suivent recevoir votre certificat SSL (Fichier CRT) par email.

Attention, NameCheap va vous transmettre deux certificats SSL : un nommé "Web Server CERTIFICATE", et un autre nommé "INTERMEDIATE CA". Il va vous falloir les deux pour que le tout fonctionne parfaitement.

Enregistrez le "Web Server CERTIFICATE" dans un fichier nommé "admin-serv.crt", et enregistrez le "INTERMEDIATE CA" dans un fichier nommé "rapidssl.ca.crt".

Nous allons ensuite créé un unique fichier CRT contenant ces deux précédents certificats

cat admin-serv.crt rapidssl.ca.crt > certificate.admin-serv.net.crt

Voilà le tout est prêt, il ne vous reste plus qu'à configurer NGinx correctement pour lui faire utiliser votre certificat

nano /etc/nginx/sites-enabled/default
# Adaptez à vos besoins:
server {
        listen 443;
        server_name admin-serv.net;
        ssl on;
        ssl_certificate /etc/nginx/ssl/certificate.admin-serv.net.crt;
        ssl_certificate_key     /etc/nginx/ssl/admin-serv.net.deprotected.key;
        location / {
                root    /home/www/;
                index   index.php index.html index.htm;
        }
}

Relancez ensuite NGinx

/etc/init.d/nginx restart
Restarting nginx: nginx.

Il ne vous reste plus qu'à tester :

curl -v -I https://admin-serv.net/

Si vous n'avez pas d'alerte de sécurité c'est que tout a bien fonctionné

 

 

5 Commentaires pour ce billet.

 

 

  1. Merci pour ton article, j'ai cependant un petit soucis :

    J'ai voulu crée un certificat ssl sans passer pour nameCheap pour commencer en faisant un test, j'ai donc suivit ton tutoriel, plus une commande donné sur http://wiki.nginx.org/HttpSslModule pour signer soi-meme son certicificat :

    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

    Pour le reste, tout est comme sur l'article, mais une fois nginx relance, j'ai un joli 'ERR_CONNECTION_TIMED_OUT' sur chrome en tentant le https, sans aucun log d'erreur de la part de nginx... D'ou pourrais venir le probleme ?

    Merci d'avance ! :)

  2. Problème résolu, le soucis ne venait pas de ma configuration mais du port 443 qui était tout simplement bloqué sur mon serveur.

    Pour le débloquer facilement : http://www.cyberciti.biz/tips/linux-iptables-11-how-to-block-or-open-httpweb-service.html

  3. @Sullivan : aucuns soucis, je pensais qu'en effet ça pouvait venir de l'ouverture de port, mais avec aussi peu de détails, c'était vraiment une idée parmi d'autres.

  4. Salut

    J'ai un message disant que postmaster@mondomain n'est pas valide, comment puis l'ajouter ou le rendre valide ?

    Merci

  5. Comment puis récupérer le mail de validation sur une adresse en gmail par exemple ?

 

Votre commentaire