Automatiser le renouvellement des certificats Let's Encrypt avec acme.sh

note : Dans ce tuto il faudra remplacer mondedie.fr par votre nom de domaine

Pour commencer, on va créer un dossier web pour le challenge let's encrypt

mkdir -p /var/www/acme/.well-known/acme-challenge
mkdir -p /etc/nginx/ssl/live/mondedie.fr

Ajouter le fichier de configuration default.conf dans /etc/nginx/sites-enabled

# vi /etc/nginx/sites-enabled/default.conf

server {
  listen 80;
  charset utf-8;
  server_name mondedie.fr www.mondedie.fr;

  root /var/www/acme;

  location /.well-known/acme-challenge {}
}

On recharge nginx

nginx -t # on vérifie la configuration nginx avant
service nginx restart

On installe acme.sh

wget -O - https://get.acme.sh | sh
source ~/.bashrc

On génère un certificat

acme.sh --issue \
  --keylength 4096 \
  --webroot /var/www/acme \
  --domain mondedie.fr \
  --domain www.mondedie.fr

On configure les vhosts nginx concerné par le certificat

# vi /etc/nginx/sites-enabled/mondedie.fr.conf

server {
  listen 443 ssl http2;
  server_name mondedie.fr www.mondedie.fr;

  ssl_certificate /etc/nginx/ssl/live/mondedie.fr/fullchain.pem;
  ssl_certificate_key /etc/nginx/ssl/live/mondedie.fr/privkey.pem;
  include /etc/nginx/conf.d/ssl.conf;
  
  ...
}

On crée un fichier de configuration ssl pour nginx (c'est une suggestion vous pouvez modifier ce fichier à votre guise)

# vi /etc/nginx/conf.d/ssl.conf

ssl_protocols TLSv1.2;
ssl_ecdh_curve X25519:P-521:P-384:P-256;
ssl_ciphers "EECDH+CHACHA20:EECDH+AES";
ssl_prefer_server_ciphers on;

ssl_session_cache shared:SSL:20m;
ssl_session_timeout 15m;
ssl_session_tickets off;

On installe le certificat généré

acme.sh \
  --install-cert   -d mondedie.fr \
  --cert-file      /etc/nginx/ssl/live/mondedie.fr/cert.pem \
  --key-file       /etc/nginx/ssl/live/mondedie.fr/privkey.pem \
  --ca-file        /etc/nginx/ssl/live/mondedie.fr/chain.pem \
  --fullchain-file /etc/nginx/ssl/live/mondedie.fr/fullchain.pem \
  --reloadcmd      "service nginx restart"

Pour mettre à jour acme.sh

acme.sh --upgrade

Normalement, une tâche cron renouvelle automatiquement votre certificat ssl, vous consulter la tâche cron ici
cron crontab -l
Sinon vous pouvez renouveler le certificat manuellement

acme.sh --renew -d mondedie.fr
Magicalex a renommé le titre en [Tuto] Renouveler vos certificats Let's Encrypt automatiquement (acme.sh nginx).
2 mois plus tard

HQseed Oui et donc? c'est exactement ce que je dis dans le tuto sauf que là j'explique comment le faire avec acme.sh...

    Magicalex Oui tout a fait, mais autant utiliser la documentation de nginx pour procéder au renouvellement des certificats issues pour nginx. Normallement on préfère utiliser les documentations officielle.

    Je ne critique en rien ton tuto. Acme est probablement une solution tout a fait viable.

      4 jours plus tard

      HQseed cela dit, moi je trouve ce tuto intéressant parce que avec la solution de la documentation officielle, j'ai mon site qui plante a chaque fois et je suis obligé de redémarrer nginx a la main.

        myxomatom Tu as dus foirer quelque part ^^ Oui le tuto avec acme est très bien fait, merci a Magicalex 🙂

        Bonjour, c'est surtout que ce script demande peu de dépendances sur le système. Il fonctionne sur les nas. ( Je l'utilise sur mon Synology)

        Répondre…