Outils pour utilisateurs

Outils du site


kb:crypto:letsencrypt

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
kb:crypto:letsencrypt [2018/03/06 21:34] beukb:crypto:letsencrypt [2022/10/14 09:30] (Version actuelle) – [Signature du certificat] beu
Ligne 1: Ligne 1:
 ======Let's Encrypt====== ======Let's Encrypt======
  
-====Introduction====+====Comprendre Let's Encrypt==== 
 + 
 +Let's Encrypt est un Autorité de Certification qui est **GRATUITE** et qui permet de signer un certificat de façon automatique et quasi instantané.  
 + 
 +Deux méthodes existent pour valider un certificat :\\ 
 +  - Par requête HTTP : Lors de la demande de certificat, l'API va effectuer une requête HTTP sur la dites URL dans le répertoire ///.well-known/acme-challenge// d'un fichier très spécifique qu'il aura demandé de créer lors de la dites requête. 
 +  - Par requêtes DNS : Lors de la requête, l'API fera une requête TXT particulière sur le DNS. Celle-ci n'est soit pas automatique ou elle oblige que le serveur WEB puissent mettre à jour sa zone DNS. Bien que plus contraignante, elle permet depuis la version 2 de signer des certificats WildCard. 
 + 
 +====Pourquoi cette méthode====
  
 L'objectif de cette page est de générer et faire signer des certificats avec Let's Encrypt.\\ L'objectif de cette page est de générer et faire signer des certificats avec Let's Encrypt.\\
Ligne 10: Ligne 18:
 Cette méthode n'est pas éligible au renouvellement automatique de certbot, donc il faudra ajouter manuellement l'entrée en tache cron. La méthodologie, si suivie a la lettre, permet un gestion simple de ces certificats. Cette méthode n'est pas éligible au renouvellement automatique de certbot, donc il faudra ajouter manuellement l'entrée en tache cron. La méthodologie, si suivie a la lettre, permet un gestion simple de ces certificats.
  
-====Génération des certificats====+ 
 +====Génération du certificat====
  
 Pour chaque domaines, nous allons créer les dossiers où seront stocké les certificats et les clés: Pour chaque domaines, nous allons créer les dossiers où seront stocké les certificats et les clés:
  
-<code> +<code bash
-# mkdir -p /etc/letsencrypt/wiki.virtit.fr/live +# mkdir -p /etc/ssl/custom-certbot/{live,archive}/wiki.virtit.fr
-# mkdir -p /etc/letsencrypt/wiki.virtit.fr/archive+
 </code> </code>
  
-puis on génère le certificat :+puis on génère la clé privé:
  
-<code> +<code bash
-# openssl ecparam -name prime256v1 -genkey -out /etc/letsencrypt/wiki.virtit.fr/live/private.key +# openssl ecparam -name prime256v1 -genkey -out /etc/ssl/custom-certbot/live/wiki.virtit.fr/privkey.pem
-# openssl req -new -key virtit.pem -nodes -days 3650 -out /etc/letsencrypt/wiki.virtit.fr/live/certificate.csr+
 </code> </code>
  
-Ces certificats seront unique mais pensez à les renouveler régulièrement :-).+Puis le certificat publique  
 + 
 +<code bash> 
 +# openssl req -new -subj "/CN=wiki.virtit.fr" -key /etc/ssl/custom-certbot/live/wiki.virtit.fr/privkey.pem -nodes -out /etc/ssl/custom-certbot/live/wiki.virtit.fr/csr.pem 
 +</code> 
 + 
 +Ces certificats seront unique mais pensez à les renouveler de temps en temps :-).
  
 ====Signature du certificat==== ====Signature du certificat====
Ligne 32: Ligne 45:
 Pour signer votre certificat, il faut lancer la commande suivante : Pour signer votre certificat, il faut lancer la commande suivante :
  
-<code> +<code bash
- # certbot certonly --webroot -w /var/www/letsencrypt/ -d wiki.virtit.fr --csr /etc/letsencrypt/wiki.virtit.fr/live/cert.csr --cert-path /etc/letsencrypt/wiki.virtit.fr/live/cert.pem --chain-path /etc/letsencrypt/wiki.virtit.fr/live/chain.pem --fullchain-path /etc/letsencrypt/wiki.virtit.fr/live/fullchain.pem+# certbot certonly --webroot -w /var/www/letsencrypt/ -d wiki.virtit.fr --csr /etc/ssl/custom-certbot/live/wiki.virtit.fr/csr.pem --cert-path /etc/ssl/custom-certbot/live/wiki.virtit.fr/cert.pem --chain-path /etc/ssl/custom-certbot/live/wiki.virtit.fr/chain.pem --fullchain-path /etc/ssl/custom-certbot/live/wiki.virtit.fr/fullchain.pem
 </code> </code>
  
 ====Renouvellement du certificat==== ====Renouvellement du certificat====
  
-Pour renouveler le certificat, il faut déplacer le certificat, et les chaines de certificats.\\+Pour renouveler le certificat, j'ai créé un script qui va vérifier la date d'expiration, et renouvelle au besoin.\\
 Je vous conseil d'ajouter la tâche **cron** suivante : Je vous conseil d'ajouter la tâche **cron** suivante :
  
-<code> +<code bash
-0 2 * * * /bin/rm /etc/letsencrypt/wiki.virtit.fr/archive/* && /bin/mv /etc/letsencrypt/wiki.virtit.fr/live/*.pem /etc/letsencrypt/wiki.virtit.fr/archive/ && /usr/bin/certbot certonly --webroot -w /var/www/letsencrypt/ -d wiki.virtit.fr --csr /etc/letsencrypt/wiki.virtit.fr/live/cert.csr --cert-path /etc/letsencrypt/wiki.virtit.fr/live/cert.pem --chain-path /etc/letsencrypt/wiki.virtit.fr/live/chain.pem --fullchain-path /etc/letsencrypt/wiki.virtit.fr/live/fullchain.pem --post-hook '/bin/systemctl reload apache2'+0 2 * * * root /opt/renew-cert.sh
 </code> </code>
  
-Il faudra adapter la dite commande avec le bon domaine et les bons post-hook. +et créer le script suivant :
----- +
-====Installation de Let's Encrypt====+
  
-Il faudra installer certbot qui est dans les dépôts backports+<code bash /opt/renew-cert.sh> 
 +#!/usr/bin/env bash
  
-<code> +PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 
-# apt install letsencrypt +cd /etc/ssl/custom-certbot/live/ 
-</code>+TEMP=`mktemp -d` 
 +NOW_SECONDS=`date '+%s'
 +NEEDTORELOAD=0
  
-====Création d'un certificat SSL====+for i in * ; do 
 + END_DATE=`openssl x509 -dates -noout -in ${i}/cert.pem 2>/dev/null | sed -n 's/ *notAfter=*//p'
 + END_DATE_SECONDS=`date '+%s' --date "$END_DATE"
 + REMAINING_DAYS=`echo "($END_DATE_SECONDS-$NOW_SECONDS)/24/3600" | bc` 
 + if [ "$REMAINING_DAYS" -lt "30" ]; then 
 + NEEDTORELOAD=
 + echo "Renewing $i" 
 + mkdir ${TEMP}/${i} 
 + /usr/bin/certbot certonly --webroot -w /var/www/letsencrypt/  -d $i --csr ${i}/csr.pem --cert-path ${TEMP}/${i}/cert.pem --chain-path ${TEMP}/${i}/chain.pem --fullchain-path ${TEMP}/${i}/fullchain.pem 
 + EXITCODE=$? 
 + if [ "$EXITCODE" -eq "0" ]; then 
 + if [ ! -d "/etc/ssl/custom-certbot/archive/${i}" ]; then 
 + mkdir /etc/ssl/custom-certbot/archive/${i} 
 + fi 
 + mv ${i}/cert.pem  /etc/ssl/custom-certbot/archive/${i}/cert.pem 
 + mv ${i}/chain.pem  /etc/ssl/custom-certbot/archive/${i}/chain.pem 
 + mv ${i}/fullchain.pem  /etc/ssl/custom-certbot/archive/${i}/fullchain.pem 
 + mv ${TEMP}/${i}/* ${i}/ 
 + fi 
 + else 
 + if [ -t 1 ] ; then 
 + echo "Nothing to do on $i ($REMAINING_DAYS days left)" 
 + fi 
 + fi
  
-il faudra stopper NginX, Apache ou toutes les applications utilisant le port 80 ou 443 +done
-<code> +
-# service apache2 stop  +
-</code> +
-Création du certificat +
-<code> +
-# letsencrypt certonly --rsa-key-size 4096 -d wiki.virtit.fr +
-</code> +
-puis suivre les indications. +
-  +
  
-====Renouvellement des certificats==== +if [ "$NEEDTORELOAD" -eq "1" ]; then 
- + echo "Reloading services" 
-il faudra stopper Nginx, Apache ou toutes les applications utilisant le port 80 ou 443 + systemctl reload nginx 
-<code> +fi 
-# service apache2 stop  +rm -r $TEMP
-</code>   +
-Puis il suffira de lancer  +
-<code> +
-# letsencrypt renew --force-renewal+
 </code> </code>
-====Problèmes rencontrés==== 
- 
-En cas de Reverse Proxy, Il faudra un peu plus s'acharné avec le script (qui ne prends pas en compte cette solution).  
  
-Il faudra s'orienter vers l'option "standalone" du script+Il faudra le rendre exécutable, et ajouter les commandes nécessaires au rechargement des services dans le script.
kb/crypto/letsencrypt.1520372056.txt.gz · Dernière modification : 2018/03/06 21:34 de beu