Configurer HTTPS pour un serveur NGINX sous Debian 8

Maintenant que Let’s Encrypt propose des certifcats de sécurité pour surfer via le protocole https, il serait dommage de se priver. A noter que StartSSL en propose également. Après, il vous reste la solution des certificats auto-signés qui cependant peut poser pas mal de problèmes pour ce qui est de la reconnaissance par les différents navigateurs.

HTTPS avec NGINX ? Facile !

serveur web nginx

En fait, ce n’est pas bien compliqué de mettre en oeuvre le protocole https pour un serveur NGINX pour peu qu’on ait la bonne config sous la main. Ce qui bien entendu n’était pas mon cas. La chose ne fut donc pas des plus faciles et pour y arriver j’ai fait un mix des deux solutions proposées par angristan et  memorandum

Pourquoi ? Et bien tout simplement, en essayant l’une ou l’autre des méthodes proposées, mon protocole https n’était pas reconnu par tous les navigateurs ou par les sites de tests tel que GTmetrix. Surtout sur les mobiles. Un gros message d’erreur avec une connexion non sécurisé qui rebute à coup sûr n’importe quel visiteur. Même le plus téméraire.

sécurité Internet

Après plusieurs essais infructueux et pas mal de prises de têtes, d’heures passées, de crises de nerfs, de prières et autres incantations magiques, je pense avoir trouvé la solution idoine que voici.

1. Installation de certbot

https certbot

Dans un premier temps, nous installons certbot qui est un outil dédié à la gestion des certificats de sécurité. A noter, que sur le site de certbot, il vous est proposé de choisir votre serveur et la distribution utilisée afin de générer automatiquement la commande d’installation.

Donc ajoutons, les backports sur Debian dans le fichier des sources du gestionnaire apt:

/etc/apt/sources.list

Pour Debian 8 :

#Ajout des backports debian 8
deb http://ftp.debian.org/debian jessie-backports main

Une fois la chose faîte, on update les sources de la manière suivante

sudo apt update

On installe ensuite le paquet Certbot avec la commande

sudo apt install certbot -t jessie-backports

2. Génération du certificat Let’s Encrypt

certifict de sécurité https

Pour ce faire, nous allons bien sûr utiliser notre ami Cerbot en spécifiant la commande suivante :

certbot certonly -d www.votredomaine.com

Pour ma part, j’ai opté pour la méthode Standalone. Attention, celle-ci nécessite d’arrêter tous les services tournant sur le port 80 et 433 donc de facto votre serveur Nginx ou Apache.

Si tout se passe bien , vous devriez avoir un message semblable à celui-ci :

httpsinternet

Il est bon de savoir que les certificats Let’s Encrypt ont une validité de 3 mois. Et oui ! Heureux possesseur d’une version Debian, soyez rassurés car une tâche CRON est automatiquement créé par certbot. Certbot, un ami qui vous veut du bien assurément. Et pour les autres, vous l’aurez compris, reste plus qu’à créer par vous-même une tâche CRON qui viendra s’exécuter à raison de 2 fois par jour pour tester la validité du certificat en cours et si besoin le renouveler. Je vous laisse consulter la documentation de Cerbot pour plus d’informations sur le sujet.

3. Création d’une clé Diffie-Hellman

A éviter !!! Alors pourquoi on en parle ? Et bien, étant dans le panneau, je partage l’information. Sur la nouvelle version de Firefox, cela génére une belle erreur sur la page au niveau du certificat de sécurité. Notamment un problème avec le protocole http2 dixit le message d’erreur suivant : NS_ERROR_NET_INADEQUATE_SECURITY. Plus de détails sur cette erreur sur le forum Firefox. On peut passer outre en mettant à false network.httpd.spdy.enabled.http2 et pour cela il faut entrer about:config comme url. Bref, chose impensable pour l’internaute lambda.

4. Configuration du VirtualHost NGINX

Voici un exemple de configuration. Qui fonctionne pour mes sites Internet. A adapter selon vos besoins. A noter que l’on procéde à une redirection du protocole http vers https.

server {

listen 80;
listen [::]:80;   #Use this to enable IPv6
rewrite ^ https://$server_name$request_uri? permanent;
}

server{

listen 443 ssl http2;
server_name www.votredomaine.com;
root /var/www/votresite;

//Chemin d’accès au certificat
ssl_certificate /etc/letsencrypt/live/www.ve-studio.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.ve-studio.net/privkey.pem;

# Les protocoles SSL utilisés
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# Activation et autorisation des ciphers
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EECDH+AES;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

# Ajout d’une règle http
add_header Strict-Transport-Security « max-age=31536000; »;

##Suite de votre config

….

}

Voilà, vous redémarrez votre serveur et le tour est joué ! Voyez comme quoi installer https sur nginx via cerbot et Let’sEncrypt n’est pas trop compliqué. Il n’y a plus qu’à tester (dans plusieurs navigateurs desktop et mobile) pour voir apparaître le joli petit cadenas dans la barre d’adresse et espérer de la part de Google une petite faveur au niveau du référencement de votre site Internet.

site Internet sécurisé https

Avant que je n’oublie, vous pouvez tester le niveau de votre certificat de sécurité sur le site SSL Labs. VeStudio s’est vu gratifier d’un joli A.

Configurer HTTPS pour un serveur NGINX sous Debian 8
Votez pour ce billet !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *