Let’s Encrypt, ajouter un certificat SSL via Nginx.

Let's encrypt certificat SSL

Dans cet article, je vous propose d’installer un certificat SSL gratuit via Let’s encrypt sur votre serveur web Nginx. Découvrez comment ajouter le support HTTPS pour sécuriser votre site internet ainsi que vos visiteurs et utilisateur.

De nos jours, et avec toutes les formes de piratage qui émergent de plus en plus rapidement sur le web, les internautes sont de plus en plus soucieux de leurs données (identité, carte de crédit, …) et ne souhaitent pas se les faire voler. Pour faire face à cette problématique, les certificats SSL offre une solution assurant la sécurisation des données durant les échanges entre le site web et l’internaute.

Nous allons voir, comment installer gratuitement un certificat SSL pour sécuriser votre site web ainsi que vos visiteurs et utilisateur. Sachez aussi, que Google aurait une forte tendance à privilégier les sites internet proposant un certificat SSL dans ses résultats de recherche.

Installation de Let’s encrypt

Tout d’abord, pour ceux qui ne connaissent pas cet outil, sachez que Let’s encrypt est une autorité de certificat. De plus, il offre un outil puissant permettant d’installer un certificat en quelques lignes de commandes pour votre nom de domaine.

Commençons par installer let’s encrypt sur votre serveur dans le répertoire /opt depuis le dépôt git officiel.

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Mise en place du certificat

Maintenant que nous avons notre outil, il nous faut alors générer un nouveau certificat pour notre nom de domaine. L’outil est encore au stade expérimental du support d’installation automatique pour les serveurs Nginx. De ce fait, nous allons procéder à une installation semi-automatique.

Tout d’abord, vous devez ajouter une autorisation pour l’accès au dossier .well-known/acme-challenge se trouvant sur votre site internet pour que Let’s encrypt puisse vérifier que vous êtes bien le propriétaire du nom de domaine. Vous pouvez réaliser cette opération en ajouter les lignes ci-dessous à votre vhost Nginx.

server {
   ....
   ~ /\.well-known {
        allow all;
   }
   ....
}

Une fois votre fichier de configuration mis à jour, n’oubliez pas de recharger votre serveur pour qu’il prenne en compte les changements effectués. Nous allons donc procéder à la génération du certificat pour le ou les noms de domaines qui nous intéresse.

sudo /opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --webroot --webroot-path /var/www/mondomaine.fr -d mondomaine.fr -d www.mondomaine.fr

Notez que nous générons dans cet exemple deux certificats, un pour monomaine.fr et un autre pour www.mondomaine.fr, mais vous pouvez arranger ceci à votre convenance.

Les certificats et les clefs générés sont alors stocker dans votre dossier : /etc/letsencrypt/live/. Ce sont ces certificats que nous allons utiliser pour sécuriser votre site internet.

Mise à jour du site internet avec le support HTTPS

Let's encrypt certificat SSL

Maintenant que nous avons nos certificats SSL, nous allons pouvoir configurer le serveur Nginx afin d’ajouter au site web le support SSL. Ci-dessous, vous trouverez une configuration typique, vous n’avez qu’à remplacer le nom de domaine (mondomaine.fr) par votre nom de domaine.

Cette configuration présente l’avantage de redirigé nativement tous les flux http et https vers votre nom de domaine en www. Cela a pour avantage de renvoyer automatiquement vos visiteurs vers un seul et même nom de domaine : https://www.mondomaine.fr

server {
	listen 80;
	server_name mondomaine.fr www.mondomaine.fr;
	return 301 https://www.mondomaine.fr$request_uri;
}

server {
	listen 443 ssl;
	server_name mondomaine.fr;
	ssl_certificate /etc/letsencrypt/live/mondomaine.fr/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/mondomaine.fr/privkey.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /etc/ssl/certs/dhparam.pem;
	ssl_stapling on;
	ssl_stapling_verify on;
	ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
	ssl_session_cache shared:SSL:100m;
	ssl_session_timeout 24h;
	add_header Strict-Transport-Security max-age=15768000;
	return 301 https://www.mondomaine.fr$request_uri;
}


server {
	listen 443 ssl;
	server_name www.mondomaine.fr;

	index index.php;
	root /var/www/mondomaine.fr;

	ssl_certificate /etc/letsencrypt/live/www.mondomaine.fr/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/www.mondomaine.fr/privkey.pem;
	ssl_protocols TLSv1.2;
	ssl_dhparam /etc/ssl/certs/dhparam.pem;
	ssl_stapling on;
	ssl_stapling_verify on;
	ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
	ssl_session_cache shared:SSL:100m;
	ssl_session_timeout 24h;
	add_header Strict-Transport-Security max-age=15768000;
	
	location = /favicon.ico {
		log_not_found off;
		access_log off;
	}
	
	location = /robots.txt {
		allow all;
		log_not_found off;
		access_log off;
	}
	
	location / {
		try_files $uri $uri/ /index.php?$args;
	}
	
	location ~ \.php$ {
		include fastcgi.conf;
		fastcgi_intercept_errors on;
		fastcgi_pass php;
	}
	
	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
		expires max;
		log_not_found off;
	}
}

Renouvellement automatique du certificat

Let’s encrypt vous permet de renouvellement automatiquement votre certificat, pour ce faire, nous allons simplement ajouter une règle à notre fichier crontab.

sudo crontab -e
0 3 * * 0 /opt/letsencrypt/letsencrypt-auto renew

Voilà, vous savez tout sur les certificats SSL et votre site web est maintenant sécurisé. N’hésitez pas à partager cet article si il vous a sembler utile et à ajouter un commentaire si vous avez des besoins ou questions.

Laisser une réponse

Votre adresse email est et restera confidentielle. Les champs marqués d'une * sont obligatoires.

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

Tous les articles liés