Le serpent qui se mord la queue : génération automatique de certificats SSL
On est face à un soucis dans la génération des certificats SSL.
Le soucis viens de l'utilisation d'un webroot géré par Nginx.
Let'sEncrypt va utiliser le well-known d'un site pour lire un fichier qui est généré par certbot dans /var/www/letsencrypt. La mise en ligne du fichier est géré par Nginx. Donc, il faut, pour chaque site, une configuration qui le permette, généralement sous la forme ;
location /.well-known/acme-challenge {
alias /var/www/letsencrypt/.well-known/acme-challenge;
}
MAIS !
Si c'est la première génération de certificat, alors Nginx va refuser de démarrer parce qu'il manque le certificat nécessaire à la configuration HTTPS.
2024/02/05 14:18:25 [emerg] 382339#382339: cannot load certificate "/etc/letsencrypt/live/sso.test.lqdn.fr/fullchain.pem": BIO_new_file() failed (SSL: error:80000002:system library::No such file or directory:calling fopen(/etc/letsencrypt/live/sso.test.lqdn.fr/fullchain.pem, r) error:10000080:BIO routines::no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed
Les solutions à l'heure actuelle sont ;
- Faire la 1er génération du certificat à la main, en utilisant le mode standalone. Mais ça implique de couper le serveur Nginx pour que celui de certbot puisse prendre la main.
- Utiliser l'option standalone dans Ansible. Ça permet de résoudre le soucis de la première génération de certificat, mais fera que Nginx sera coupé à chaque renouvellement de certificat ( une fois tout les 60 jours en moyenne ).
- Utiliser une configuration plus poussée de Certbot, par exemple avec un script qui gère ce cas de figure. Voir https://eff-certbot.readthedocs.io/en/latest/using.html#pre-and-post-validation-hooks
- Avoir un fichier nginx particulier pour le service certbot qui réponde sur le port 80, qui serait poussé par défaut sur l'ensemble des serveurs et ne nécessite pas de certificats SSL pour démarrer Nginx. Je pense que c'est la solution optimale.
- Une autre solution ?