Reverse Proxy
Le reverse proxy est l'architecture que j'ai choisi, depuis des années, pour assurer la liaison avec le tiers de confiance letsencrypt lors de la demande de certificats gratuits https (protocole ACME) et pour cacher l'architecture des logiciels de serveurs Web locaux/distants non cryptés.
L'avantage est que toute la complexité du protocole https crypté repose sur lui, laissant au développeur le libre choix du logiciel serveur Web, même si celui-ci n'est pas équipé pour travailler en mode crypté.
C'est une phase délicate, le protocole ACME est chatouilleux !
Votre nom de domaine, acheté chez un registrar officiel, doit pointer sur l'adresse IP de votre serveur (paramètre A DNS de votre registrar).
Les serveurs Web locaux doivent travailler sur l'adresse locale 127.0.0.1 mais sur un canal différent entre eux (cas de plusieurs serveurs Web/noms de domaines)
J'utilise le programme certbot de l'EFF (Electronic Frontier Foundation) pour la demande de certificats https avec ce tiers de confiance letsencrypt. Il s'installe via la commande (alpine linux) :
doas apk add certbot certbot-nginx
J'utilise le logiciel nginx, oeuvre d'un talentueux développeur Russe (et oui, ils sont très bons en logiciels).
Il s'installe via la commande :
doas apk add nginx
On ne touche rien des fichiers de configuration de nginx, il faut aller dans le répertoire (sous root) /etc/nginx/http.d/
Et créer des fichiers de configuration pour chaque domaine géré par nginx nom -> votrenomdedomaine.conf
Si nginx a été lancé par l'OS, vérifier par :
ps | grep nginx
S'il est lancé, killer le nginx master process en référence au no de process ID
Tester la syntaxe des fichiers de configs de vos domaines
doas nginx -t
## Ã placer dans /etc/nginx/http.d/ server { server_name votrenomdedomaine.com; location / { proxy_pass http://127.0.0.1:no_canal_local/; proxy_buffering off; proxy_set_header X-Real-IP $remote_addr; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/votrenomdomaine/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/votrenomdomaine/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = votrenomdedomaine) { return 301 https://$host$request_uri; } # managed by Certbot server_name votrenomdedomaine; listen 80; return 404; # managed by Certbot } server { if ($host = votrenomdedomaine) { return 301 https://$host$request_uri; } # managed by Certbot server_name votrenomdedomain; listen 80; return 404; # managed by Certbot }
Si tout est OK du côté de la config de nginx lancer le commande
doas certbot certonly
Si un firewall comme ufw tourne, penser à vérifier que les ports 80 et 443 sont ouverts !
Letsencrypt vous demandera une adresse de contact pour renouveler votre certificat (valable 3 mois mais gratuit !), il vous préviendra qu'il faudra le faire...
Commande de renouvellement du certificat :
doas certbot renew
C'est un domaine complexe et délicat. Il y a plein de choses qui peuvent mal tourner. Restez concentré !
Hasta la vista