Comment configurer le certificat SSL gratuit “Let’s Encrypt” dans Nginx (Ubuntu)

Si vous avez lu de nombreux articles sur les conseils de confidentialité, vous êtes sûrement tombé sur un conseil qui vous demande d’installer l’extension “HTTPS everywhere” afin qu’elle vous redirige automatiquement vers la version HTTPS du site web lorsque cela est possible. Le problème est que l’extension HTTPS everywhere ne fonctionne que lorsque le site web que vous visitez a mis en œuvre SSL, et pour la plupart des webmasters, cela peut être une tâche difficile (et coûteuse) en soi. Heureusement, avec le mouvement Let’s Encrypt, il est maintenant plus facile pour les webmasters d’ajouter des certificats SSL à leurs sites.

Dans le passé (et actuellement), la configuration d’un certificat SSL nécessite d’abord de générer une clé privée sur votre serveur, puis d’acheter un certificat SSL auprès de l’autorité de certification (ce qui peut être coûteux), et enfin de le configurer sur le serveur. Il y a beaucoup de détails techniques impliqués dans le processus, et ne pas le faire correctement rendra le certificat SSL inutile. Avec le projet Let’s Encrypt, on peut rapidement ajouter un certificat SSL à ses sites sans aucun coût. De plus, soutenu par de grands acteurs de l’industrie comme Mozilla, Akamai, Cisco, EFF et Google, il est pris en charge par la plupart des navigateurs et systèmes d’exploitation.

Dans ce tutoriel, nous allons passer en revue les étapes pour configurer le certificat SSL Let’s Encrypt sur le serveur Nginx. Nous utilisons un serveur Ubuntu 14.04 pour ce tutoriel et supposons que vous utilisez un serveur Nginx Ubuntu fonctionnel. L’instruction peut différer pour un serveur Ubuntu 16.04.

Installer Let’s Encrypt

Tout d’abord, pour installer Let’s Encrypt, vous aurez besoin de git pour le cloner depuis son dépôt git. Installez git avec la commande suivante :

sudo apt-get install git bc

Une fois installé, clonez le dépôt de Let’s Encrypt :

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

Configuration de l’environnement

Avant de procéder à l’installation et à la configuration du certificat SSL, il est important de permettre l’accès au dossier .well-known dans le répertoire racine web. Par défaut, tous les fichiers et dossiers avec un “.” devant le nom de fichier sont cachés et non accessibles au public. Cependant, dans ce cas, nous devrons fournir la permission au public d’accéder au dossier .well-known, car c’est ici que Let’s Encrypt stockera un fichier spécial pour la validation.

Accédez à votre dossier de configuration de site Nginx et ouvrez-le (si vous avez un fichier de configuration personnalisé pour votre site) ou utilisez le défaut :

cd /etc/nginx/sites-available  
sudo nano default

Ajoutez les lignes suivantes dans le bloc serveur :

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

Enregistrez (Ctrl + O) et fermez (Ctrl + X) le fichier de configuration.

Testez votre configuration Nginx :

sudo nginx -t

Si toute la configuration fonctionne correctement, rechargez la configuration :

sudo service nginx reload

Générer un certificat SSL

Maintenant que vous avez terminé la configuration de Nginx, la prochaine étape est d’installer le certificat SSL.

Allez dans le dossier Let’s Encrypt :

cd /opt/letsencrypt

Exécutez la commande suivante pour générer le certificat :

./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com

Il y a quelques éléments à changer ici :

  • Changez le webroot-path par le chemin du répertoire racine de votre site. Le défaut est “/usr/share/nginx/html”, mais votre configuration peut différer.
  • Changez “example.com” par votre propre nom de domaine. Notez que “example.com” et “www.example.com” sont deux domaines différents. Si vous souhaitez que le certificat prenne en charge plusieurs domaines, ajoutez simplement -d example1.com à la fin de la commande. Par exemple, pour configurer un certificat SSL pour les domaines “example.com”, “www.example.com”, “example1.com” et “www.example1.com”, utilisez la commande suivante :
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com -d example1.com -d www.example1.com

Lors de la première exécution, le script installera un certain nombre de fichiers Python dans votre système. Une fois terminé, il commencera le processus de génération du certificat. Tout d’abord, il vous demandera votre adresse e-mail :

nginx-letsencrypt-email-address

Après cela, vous serez invité à lire les Conditions de service sur le site de Let’s Encrypt. Sélectionnez “Accepter”.

nginx-letsencrypt-read-tos

Si vous voyez le message suivant :

IMPORTANT NOTES:  
 - Félicitations ! Votre certificat et la chaîne ont été sauvegardés à  
/etc/letsencrypt/live/example.com/fullchain.pem. Votre certificat  
   expirera le 2016-10-02. Pour obtenir une nouvelle ou une version modifiée de  
   ce certificat à l'avenir, il suffit de relancer letsencrypt-auto.  
   Pour renouveler de façon non interactive *tous* vos certificats, exécutez  
"letsencrypt-auto renew"  
 - Si vous aimez Certbot, envisagez de soutenir notre travail en :  
   Faisant un don à ISRG / Let's Encrypt :   https://letsencrypt.org/donate  
   Faisant un don à EFF :                    https://eff.org/donate-le

Cela signifie que vous avez réussi à générer un certificat SSL pour votre(s) site(s). Si vous voyez un message d’erreur à la place, corrigez l’erreur et réessayez.

Activer le certificat SSL pour votre site

Maintenant que vous avez généré le certificat SSL, il est temps de l’activer pour votre site.

Retournez dans le dossier de configuration de Nginx et ouvrez le fichier de configuration de votre site :

cd /etc/nginx/sites-available  
sudo nano default

Créez un nouveau bloc serveur et ajoutez la configuration suivante à l’intérieur du bloc :

server {  
        server_name example.com www.example.com;  
  
        listen 443 ssl;  
  
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;  
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;  
}

Enregistrez et fermez le fichier.

Remarque : ce qui précède est une version simplifiée du bloc de configuration Nginx. Vous devriez ajouter votre propre configuration personnalisée dans le bloc.

Enfin, testez la configuration :

sudo nginx -t

Si tout va bien, rechargez Nginx :

sudo service nginx reload

C’est tout. Vous avez réussi à configurer un certificat SSL pour vos sites. Vous pouvez maintenant charger la version “https” de votre URL pour le voir en action.

Renouvellement automatique d’un certificat SSL Let’s Encrypt

Contrairement à la plupart des certificats SSL commerciaux qui sont valables pour un minimum d’un an, le certificat SSL de Let’s Encrypt n’est valide que trois mois. Après ce temps, vous devrez le renouveler pour continuer à l’utiliser. Let’s Encrypt dispose d’une option renew pour que vous puissiez facilement renouveler vos certificats sans passer par toute l’installation à nouveau. Les instructions suivantes vous montrent comment configurer un travail cron pour renouveler automatiquement votre certificat SSL.

Toujours sur votre serveur, ouvrez le crontab :

sudo crontab -e

Ajoutez les lignes suivantes :

00 0 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log  
05 0 * * 1 /etc/init.d/nginx reload

Les lignes ci-dessus vérifieront la date d’expiration de vos certificats SSL chaque lundi à 00h00 et les renouvelleront s’ils sont proches de l’expiration. Cela rechargera également Nginx (à 00h05) pour s’assurer que le certificat renouvelé est en cours d’utilisation.

Enregistrez et fermez le crontab.

Conclusion

Si vous gérez un petit site web et souhaitez ajouter SSL à votre site, Let’s Encrypt est une excellente option pour ajouter de la crédibilité à votre site. C’est (relativement) facile à configurer et coûte rien (gratuit, comme de la bière), donc il n’y a aucune raison de ne pas en profiter. Cependant, puisque cela ne fournit qu’un certificat Validé par Domaine (DV) (le type de certificat SSL le plus basique) pour les entreprises qui nécessitent un certificat Validé par Organisation (OV) ou un certificat de Validation Étendue (EV), un certificat SSL commercial est probablement la meilleure solution.