in lets encrypt nginx ghost certificat ssl https ~ temps de lecture.

Configuration certificat TLS/SSL avec Let's Encrypt CA - Nginx Server

Let's Encrypt est une nouvelle autorité de certification (CA) qui propose une façon simple et rapide d'obtenir et d'installer gratuitement de nouveaux certificats TLS/SSL.
Il simplifie grandement la procédure en fournissant un logiciel (letsencrypt) qui automatise toutes les étapes de génération et de renouvellement des certificats pour nous.

J'avais fait l'expérience avec l'autorité de certification StartSSL l'année dernière dans ce billet blog toujours disponible, mais aujourd'hui c'est devenu un tel jeu d'enfant avec Let's Encrypt qu'il me serait impossible d'y retourner.

Let's Encrypt CA

Installation

Deux options se présentent à vous selon votre besoin/envie/environnement :

  • en récupérant la version de letsencrypt disponible depuis vos sources de confiance
sudo apt-get update  
sudo apt-get install letsencrypt  
  • en récupérant vous-même le code source à partir du site officiel (exécuter les commandes 'letsencrypt' par la suite depuis le répertoire /opt/letsencrypt)
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1  

Configuration

Afin d'obtenir nos certificats SSL nous allons utiliser le plugin Webroot de Let's Encrypt, pour cela il faut autoriser l'accès à une ressource (/.well-known/*) sur votre serveur afin de prouver à Let's Encrypt que le nom de domaine vous appartient.

Pour établir ce lien de confiance il faut éditer le fichier de configuration de votre serveur web (ici Nginx : /etc/nginx/sites-enabled/javacube) en y insérant le bloc suivant en lui précisant le chemin des ressources statiques de votre site, ici un blog Ghost :

server {  
      listen 80 default;
      server_name javacube.fr www.javacube.fr;

      location ~ ^/.well-known {
            root /var/www/javacube/ghost;
      }
}

#server {
#    listen 443 ssl;
#    ...
#}

Si une redirection permanente de vos pages en HTTP vers HTTPS est déjà présente dans votre fichier de configuration, il faudra commenter le bloc SSL le temps que vos certificats soient correctement générés.
Cela va vous permettre de passer outre ce message d'erreur :

Failed authorization procedure. javacube.fr (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://javacube.fr/.well-known/acme-challenge/XXXxxxxYYYyyyZZZZZzz: "

Redémarrer Nginx pour prendre en compte ces changements :

sudo service nginx restart  

Obtention des certificats

Exécuter la commande suivante :

sudo letsencrypt certonly -a webroot --webroot-path=/var/www/javacube/ghost -d javacube.fr -d www.javacube.fr  

ou (selon votre installation)

sudo /opt/letsencrypt/letsencrypt-auto certonly --webroot --webroot-path /var/www/javacube/ghost -d javacube.fr -d www.javacube.fr  

Une fois saisie une adresse email de contact/secours et acceptés les termes d'utilisation du service, vous devriez obtenir un message de succès :

Vos certificats ont été générés correctement et se trouvent au niveau du répertoire /etc/letsencrypt/live :

Un jeu d'enfant.

Installation des certificats

A présent il faut installer les certificats au niveau de votre serveur Web, la suite concerne évidemment Nginx.

  • Créer un snippet comme suit (c'est plus pratique mais il est possible de s'en paser) :
sudo nano /etc/nginx/snippets/ssl-javacube.fr  

avec les références de vos certificats à l'intérieur :

ssl_certificate /etc/letsencrypt/live/javacube.fr/fullchain.pem;  
ssl_certificate_key /etc/letsencrypt/live/javacube.fr/privkey.pem;  
  • Ensuite importer ce snippet dans votre fichier de configuration concernant votre site web, voici un aperçu du mien :
## Our http server at port 80
server {  
      listen 80 default;
      server_name javacube.fr www.javacube.fr;

      location ~ ^/.well-known {
         root /var/www/javacube/ghost;
      }

      ## redirect http to https ##
      rewrite  ^ https://$server_name$request_uri? permanent;
}

## Our https server at port 443.
server {  
    listen 443 ssl;
    server_name javacube.fr www.javacube.fr;

    ...

    ssl on;
    include snippets/ssl-javacube.fr;
    ssl_session_timeout 5m;

    ...
}
  • Redémarrer Nginx pour prendre en compte ces changements :
sudo service nginx restart  

Depuis votre navigateur nous pouvons constater que tout fonctionne correctement et que votre nouveau certificat est correctement installé et reconnu par les différents navigateurs :

Renouvellement automatique

Par défaut les certificats ne sont valides que 3 mois, il faut donc prévoir un renouvellement avant que la date d'expiration n'arrive, pour cela la simple ligne de commande suffit :

sudo letsencrypt renew  

Le mieux est encore de ne plus avoir à y penser et d'automatiser le renouvellement via la crontab :

crontab -e  

Ajouter la ligne suivante pour tenter de renouveller vos certificats le premier jour de chaque mois :

0 0 1 * * /usr/bin/letsencrypt renew >> /var/log/letsencrypt-renew.log  

ou (selon votre installation)

0 0 1 * * /opt/letsencrypt/letsencrypt-auto renew >> /var/log/letsencrypt-renew.log  

Je vous avais dit que c'était devenu un jeu d'enfant ^^ (merci letsencrypt)

comments powered by Disqus