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:24] 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.\\
-Cette méthode n'est pas la plus simple, mais elle permet de mettre en place [[kb:crypto:DANE_TLSA]] et [[kb:crypto:HPKP]] ainsi que d'avoir des certificats en [[https://en.wikipedia.org/wiki/Elliptic-curve_cryptography |ECC]].+Cette méthode n'est pas la plus simple, mais elle permet de mettre en place [[kb:crypto:DANE_TLSA|DANE/TLSA]] et [[kb:crypto:HPKP]] ainsi que d'avoir des certificats en [[https://en.wikipedia.org/wiki/Elliptic-curve_cryptography |ECC]].
  
 Pour cela, il faut juste le packet certbot/letsencrypt. Pour cela, il faut juste le packet certbot/letsencrypt.
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>
  
----- +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.1520371490.txt.gz · Dernière modification : 2018/03/06 21:24 de beu