Tags pour la question fréquent:
Linux NGinx

Cet article a-t-il répondu à votre question?

Soyez le premier à juger

Nginx - Installer un certificat SSL

Dernière mise à jour: 14/01/2016

Ce manuel vous explique comment installer un certificat qui vient de vous être émis sur le serveur Web Nginx. Pour en savoir plus comment générer votre demande de certificat, consultez l'article « Comment générer une demande de certificat avec OpenSSL ».

Contrairement à Apache, Nginx requiert que tous ses certificats SSL soient regroupés dans un seul fichier contenant le certificat root, les certificats intermédiaires, et votre propre certificat. L'ordre dans laquelle ils sont concaténés est importante:

  • Le premier certificat dans le fichier doit être le vôtre
  • Suivi par les certificats intermédiaires, s'il y en a - en général un, parfois deux
  • Ensuite le certificat root

Le certificat root n'est pas strictement nécessaire, puisqu'il est déjà connu des navigateurs, mais cela ne peut mal de l'inclure pour obtenir une chaine complète.

Selon l'émetteur de certificats que vous avez choisi, vous recevrez ou bien un seul fichier pret à l'emploi contenant tous les certificats, un fichier contenant votre certificat et un autre contenant tous ceux de l'émetteur, ou des fichiers distincts pour chaque certificat. Le plus souvent, ce sera le deuxième scénario, ou votre certificat sera indépendant, et les autres seront groupés, pour être employé directement dans Apache.

Si vous recevez de votre CA des fichier distincts, employer la commande suivante pour les concaténer dans l'ordre inverse. S'il n'y a qu'un certificat intermédiaire, bien entendu n'en ajoutez qu'un.

cat www.mondomaine.fr.crt intermediaire_2.crt intermediaire_1.crt CA_root.crt >> /etc/certs/bundle.crt

Si vous reçu votre certificat et un bundle des certificats de l'émetteur, concaténez-les de la façon suivante:

cat www.mondomaine.fr.crt ca-bundle.crt >> /etc/certs/bundle.crt

Si vous avez reçu tous vos certificats en un seul fichier, il vous suffit de le copier dans le dossier où vous gardez vos certificats, par exemple /etc/certs.

Ouvrez le fichier virtual hosts SSL de votre serveur Nginx. Suivant votre distribution, il pourrait se trouver à un des endroits suivants, ou même totalement ailleurs si vous avez installé votre serveur Nginx de source - mais dans ce cas là, ce manuel-ci ne vous apportera pas grand-chose.:

  • /etc/nginx/conf.d/ssl.conf (Red Hat, CentOs et Fedora Linux)
  • /etc/nginx/sites-available/www.mydomain.com (Debian et Ubuntu)

Ajouter un nouveau bloc server au fichier virtual hosts. Notez que dans l'exemple ci-dessous, vous devrez modifier les dossiers pour qu'il pointent vers la racine de votre site web, et les directives SSL pour qu'elles correspondent à l'endroit où vous avez sauvegardé votre clé et vos certificats. Il peut être plus aisé de copier un site web existant et d'en modifier les paramètres.

server {
  listen                    443;
  ssl                       on;
  ssl_certificate           /etc/certs/bundle.crt;
  ssl_certificate_key       /etc/certs/www.mondomaine.fr.key;
  ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;

  server_name            www.mondomaine.fr;
  access_log             /var/log/nginx/nginx.vhost.access.log;
  error_log              /var/log/nginx/nginx.vhost.error.log;
  location               / {
                             root   /home/www/public_html/www.mondomaine.fr/public/;
                             index  index.html;
  }
}

Notez bien que la configuration ci-dessus n'est qu'une configuration minimale d'un site web SSL, et qu'il est important de paramétrer votre serveur Nginx pour une meilleure performance et une plus grande sécurité. Kinamo vous conseille de consulter les articles à ce sujet dans la Knowledge Base.

C'est en général une bonne idée de tester votre configuration avant de redémarrer Nginx, pour ne pas entraver la bonne marche d'autres sites s'il y a une erreur de paramétrage. Modifier la commande ci-dessous si votre fichier de configuration principal de Nginx se trouve à un autre endroit.

nginx -t -c /etc/nginx/nginx.conf

Redémarrez Nginx pour activer la nouvelle configuration:

/etc/init.d/nginx restart

Si vous n'avez pas concaténé vos certificats dans l'ordre correct, Nginx refusera de démarrer et affichera un message d'erreur similaire au suivant:

SSL_CTX_use_PrivateKey_file(" ... /www.mondomaine.fr.key") failed
    (SSL: error:0B080074:x509 certificate routines: X509_check_private_key:key values mismatch)

Dans ce cas, réessayez de créer votre fichier de certificats en respectant l'ordre exact.

Si votre certificat ne s'affiche pas correctement dans le navigateur, contrôlez si la chaine entière de certificats est envoyé par le serveur web avec la commande suivante, en remplaçant www.kinamo.be par votre propre nom de domaine:

openssl s_client -connect www.kinamo.be:443
...
Certificate chain
 0 s:/1.3.6.1.4.1.311.60.2.1.3=BE/businessCategory=Private Organization/serialNumber=0861.077.215/C=BE/ST=Antwerpen/L=antwerpen/O=Kinamo NV/CN=www.kinamo.be
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Extended Validation SSL CA - G2
 1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Extended Validation SSL CA - G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Primary Certification Authority

Vous devriez voir une chaine de certificats commençant par le vôtre et se terminant par le certificat principal de l'émetteur.

Visitez la page de test de Qualys SSL Labs pour vérifier si votre serveur web et votre certificat correspondent au dernières normes de sécurité.