Réparer les erreurs SSL sur les services utilisant les certificats Let's Encrypt
Pour commencer, je voudrais rendre à César, ce qui appartient à César, tout le crédit de cet article revient à Frank, qui a trouvé la solution.
Aujourd'hui, vos services utilisant des certificats issus de Let's Encrypt ont peut être eu quelques dysfonctionnements. Pour ma part, c'est Gitea qui refusait les connexions SSL depuis l'outil Git ainsi que Fork qui utilise Git. Mais bizarrement, la version web de Gitea ne semblait pas affectée, et fonctionnait parfaitement bien.
D'ailleurs, tous les sites utilisant des certificats Let's Encrypt ont tous continuer à fonctionner correctement. Pourquoi ?
Tout simplement, parce que les navigateurs se sont contentés de vérifier le certificat de plus haut niveau uniquement, alors que les outils en ligne de commande tels que Curl ou des applications plus complexes comme Gitea vérifiait l'intégralité de la chaine de certification. D'ailleurs, Git le marquait bien
fatal: unable to access 'https://votre-url': SSL certificate problem: Certificate chain had an expired certificate
Que s'est il passé ? Let's encrypt avait annoncé, il y a pratiquement 2 ans, que le certificat racine qu'ils utilisaient arrivait à expiration ce 30 septembre 2021. Une transition a été amorcée depuis un certain temps afin de remplacer ce certificat. Techniquement, cela aurait du être transparent, c'est d'ailleurs le cas sur les navigateurs. Malheureusement, pour les outils en ligne de commande, cela ne l'est pas.
Comment résoudre le problème ?
Sur internet, et concernant Git, vous trouverez une solution qui n'est au final, pas une vraie solution, désactiver le contrôle du SSL sur le client
git config --global https.sslVerify false
Evidemment, cela fonctionne, mais d'un point de vue sécurité, c'est complètement à revoir. Cependant, cela peut être une solution temporaire, tant que le serveur n'est pas mis à jour. Il faut juste, ne pas oublier de réactiver les vérifications une fois que c'est fait
git config --global https.sslVerify true
Si vous être maître du serveur, voici la solution pour retrouver l'ensemble de ses services.
En root, allez dans le dossier Let's Encrypt
cd /etc/letsencrypt/live/
puis dans le dossier du service concerné, pour moi c'est Gitea
cd gitea.mondomaine.fr
Puis éditer le fichier fullchain.pem avec votre éditeur favori
Vous devriez voir 3 chaines de certificat. La première correspond à celle du certificat du service. La seconde correspond au certificat X3 de Let's encrypt. Et enfin la dernière correspond au certificat du serveur racine qui a expiré.
En ayant fait une sauvegarde du bloc ou du fichier, supprimez ce 3ème bloc, et enregistrer.
Enfin, redémarrer votre service. Tout devrait être rentré dans l'ordre.
Vous devrez éventuellement répliquer la modification sur les autres certificats, utilisés par d'autres services.