Installation d'un certificat SSL délivré par Gandi sur Nginx

Au vue des évènements récents, dont le plus popularisé a été l'affaire Snowden, après les révélations faites par ce dernier, la sécurité des données même les moins importantes soit-elles, est primordiale, il est vrai que votre site web n'est pas foncièrement susceptible de recueillir des données personnelles, mais proposer à vos visiteurs de naviguer en toute tranquillité devrait être une chose primordiale pour vous. Cependant, l'installation d'un certificat SSL, et encore plus sous Nginx est un calvaire si l'on ne sait pas par où commencer, et je parle en connaissance de cause, nous allons donc voir l'Installation d'un certificat SSL délivré par Gandi sur Nginx.

Génération de la CSR

La CSR est un fichier contenant les informations de votre demande de certificat, y compris votre clé publique.

La génération de la CSR est simple, il suffit de taper cette commande openssl req -nodes -newkey rsa:2048 -sha256 -keyout monserveur.key -out serveur.csr, il est préférable de remplacer monserveur par le domaine rattaché au futur certificat par exemple dans mon cas j'ai mis openssl req -nodes -newkey rsa:2048 -sha256 -keyout chikoumi.com.key -out chikoumi.com.csr.

L'étape importante est la question "Common Name" à laquelle il faut répondre par le domaine ou sous domaine qui sera protégé, par exemple chikoumi.com ou ssl.chikoumi.com, à noter que selon gandi pour protéger www.chikoumi.com il faut indiquer uniquement chikoumi.com les deux étant par défaut protégés par le certificat.

Après que cette dernière ai été générée, il faut en récupérer le contenu pour la transmettre à Gandi, avec un cat par exemple : cat monserveur.csr le contenu du fichier entre -----BEGIN CERTIFICATE REQUEST----- et -----END CERTIFICATE REQUEST----- est à copier en-tête et pied de page compris. Il ne vous reste plus qu'a l'indiquer à Gandi et patienter afin de recevoir votre certificat (~30 minutes environ).

Configuration du vhost de Nginx:

Pendant la création de votre certificat, il est aisé de mettre ce temps à bon escient en préparant Nginx, pour se faire, nous allons créer un vhost (ou éditer l'ancien) de la manière suivante :

#CHIKOUMI.COM
server {
    listen 443 ssl;
    ssl on;

    ssl_certificate /etc/letsencrypt/live/chikoumi.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/chikoumi.com/privkey.pem;
    ssl_dhparam /etc/nginx/dhparam.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA";
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=31536000";
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;

    server_name chikoumi.com;
    root         /home/chk;

    # Static
    location / {
        index  index.html index.htm index.php;
        try_files $uri $uri/ @extensionless-php;
    }

    #remove .php
    location @extensionless-php {
        rewrite ^(.*)$ $1.php last;
    }

    # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Security
    location ~ /\.ht {
        deny  all;
    }

    # Stuffs
    location = /favicon.ico {
        access_log   off;
        return   204;
    }

    location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml|otf)$ {
        expires     50d;
        access_log off;
    }
}

# redirect HTTP traffic to HTTPS
server {
    server_name         chikoumi.com
    listen              80;
    return              301 https://chikoumi.com$request_uri;
}

Vous remarquerez que dans mon vhost je n'indique pas ssl_certificate /etc/ssl/private/chikoumi.com.crt; mais bien ssl_certificate /etc/ssl/private/chikoumi.com.chained.crt; en raison de la concaténation de plusieurs certificats que nous allons réaliser après. En effet la concaténation est indispensable sous Nginx qui ne possède pas d'attribut lié à l'appel de certificat en chaîne dans le vhost contrairement à Apache2, de plus vous noterez la présence d'une redirection du trafic http:// vers le traffic https://.

Si vous souhaitez pousser le vice je vous invite à lire cet article de Angristan.

## Téléchargement et ajout des certificats :

Premièrement après la création de votre certificat, ils vous faut récupérer à la fois le certificat généré par Gandi, mais aussi le certficat intermédiaire, et le certifcat Cross Signed Comodo.

Par exemple j'ai téléchargé le certificat intermédiaire standart wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem puis je l'ai ajouté à mon certificat personelle généré lors de la création du CSR : cat serveur.crt GandiStandardSSLCA2.pem > serveur.chained.crt.

Cependant comme me l'a gentillement précisé Gandi par mail (je tiens à signaler la réactivité du support Gandi à ce sujet), cette méthode (SHA 2) bien que plus sécurisée n'est pas forcément supportée par la plupart des navigateurs :

Il convient d'installer le le certificat Cross Signed Comodo. Les autorités de certification, navigateurs internet et les systèmes d'exploitation prennent en charge le SHA-2 pour la majorité, mais vous pourrez cependant rencontrer des problèmes d'incompatibilité dans certains cas car les nouveaux certificats racine n'ont pas encore été ajoutés. La prise en charge par défaut est semble-t-il en cours du côté des différents navigateurs.
Ainsi Chrome mobile était rétissant à afficher mon site une fois le SSL activé :

C'est pourquoi il faut ajouter le certificat Cross Signed Comodo à la suite du certificat intermédiaire, le contenu de votre fichier serveur.com.chained.crt sera le suivant :

-----BEGIN CERTIFICATE-----
XXXXXXXXX   <- Contenu de serveur.crt
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
XXXXXXXXX   <- Certificat Intermédiaire Gandi
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
XXXXXXXXX   <- Certificat Cross Signed Comodo
-----END CERTIFICATE-----

Il faut maintenant copier ces fichiers vers le dossier /etc/ssl/private, cp serveur.chained.crt /etc/ssl/private/ &amp;&amp; cp serveur.key /etc/ssl/private. Il ne vous reste plus qu'à redémarrer Nginx afin de profiter (et surtout de faire profiter) de votre certification SSL.

Poster un Commentaire

Me notifier des
avatar
300
wpDiscuz