L'antre de la blatte

Let's encrypt avec nginx et certbot

Rédigé par blattes86 Aucun commentaire
Pour la présentation de Let's Encrypt on vas par là et pour la présentation de NginX c'est par ici. Maintenant pour l'installation sur une Debian testing (je voulais php 7.0) on peut continuer a lire. On commence par installer le paquet le paquet certbot (plus d'info ici ):
apt-get install certbot
Certbot est un client pour Let's Encrypt, la particularité de l'installé avec le paquet c'est qu'il installe absolument tout ce qu'il faut même une tâche cron. Le petit souci de Let's Encrypt c'est qu'il faut un serveur http pour pouvoir vérifier votre identité et quand on a déjà configuré tous les virtualhost en https,il faut ruser un peu. Pour cela il faut adapter la configuration de nginx, quand j'utilisé les certificats StartSSL ma configuration était celle-ci:
server
{
   listen 80;
   server_name www.monsite.fr;
   # tous ce qui arrive en http est automatiquement renvoyé vers le https
   return 301 https://$server_name$request_uri;
}



server
{
   listen 443 ssl;
   server_name www.monsite.fr;
...
Maintenant j'utilise cette configuration :
server
{
   listen 80;
   server_name www.monsite.fr;

   root /var/www/html;
   location /
   {
      # tous ce qui arrive en http est automatiquement renvoyé vers le https
      return 301 https://$server_name$request_uri;
   }
   location ~ /.well-known
   {
      #sauf cette partie que vas nous êtres utile pour certbot
      allow all;
   }
}

server
{
listen 443 ssl;
server_name www.monsite.fr;
...
ensuite pour générer vos certificat vous n'avez plus qu'a effectuer cette commande (il est possible de poussé un peu plus je vous laisse voire la doc par vous même):
certbot certonly -a webroot --webroot-path=/var/www/html -d www.monsite.fr
En gros certbot vas créer dans /var/www/html un dossier .well-known avec dedans un petit fichier. Il vas ensuite dire au serveur de Let's Encrypt: "Regarde ici, tu verras que le serveur appartient bien au gentil monsieur que te fait la demande de certification. Une fois cette vérification effectuée et validée, le certificat SSL tant désiré est généré sur votre serveur dans le dossier
/etc/letsencrypt/live/www.monsite.fr
il ne vous reste plus soit a modifié votre ancienne configuration ou faire comme ceci:
server
{
   listen 80;
   server_name www.monsite.fr;

   root /var/www/html;
   location /
   {
      # tous ce qui arrive en http est automatiquement renvoyé vers le https
      return 301 https://$server_name$request_uri;
   }
   location ~ /.well-known
   {
      #sauf cette partie que vas nous êtres utile pour certbot
      allow all;
   }
}

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

   ssl on;
   ssl_certificate /etc/letsencrypt/live/www.monsite.fr/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/www.monsite.fr/privkey.pem;
Par contre votre certificat n'est valide que 90 jours (je vous laisse vérifier j'utilise Let's Encrypt moi même) pour le coup il vas falloir penser a regenerer le certificat. Pour cela on vas déjà lancer cette commande qui vas nous permettre de faire un tir à blanc et permettre a certbot d'effectuer la configuration qui vas bien :
certbot renew --dry-run
Pour le reste on peut faire confiance a cette magnifique tache cron mise en place automatiquement a l'installation du paquet:
# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot -q renew
Nginx a besoin d'avoir sa configuration rechargé quand le certificat est modifié. Vous pouvez donc modifier le script comme ceci:
# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot -q renew && service nginx reload
Fil RSS des articles de ce mot clé