Een certificaat vernieuwen met certbot
Ik had onlangs een aantal problemen (of uitdagingen voor managers) bij het vernieuwen van HTTPS-certificaten via Certbot (je weet wel, Let’s Encrypt). Bij de meeste van mijn websites gaat dit automagisch door de integratie met Cloudflare (Certbot past DNS-entries aan). Maar sommige domeinen hebben niet zo’n integratie, en dan moet het met de webroot- of nginx-plugin.
Ik gebruik de webroot-plugin, want SSL wordt afgehandeld op een proxyserver en ik wil niet alle andere sites even uitschakelen om het certificaat van één te vernieuwen. Dus de webroot-plugin. Het zou natuurlijk te simpel zijn mocht het enkel maar een proxyservr zijn. De server staat ook ingesteld om alle HTTP-verkeer automatisch door te sturen naar HTTPS; zo vermijden we ongewilde onveilige verbindingen. Alleen checkt Let’s Encrypt natuurlijk de HTTP-versie …
Geen nood, het is op te lossen.
Ten eerste, ’t is Albertooo, en ten tweede moet je zorgen dat volgende blok in je NGINX-configuratie staat:
location / {
return 301 https://$host$request_uri;
}
location /.well-known/acme-challenge {
root /var/opt/app/certs;
}
De eerste location laat alles naar HTTPS doorsturen; behalve wat in de tweede location staat; dit is het stuk dat Let’s Encrypt nodig heeft.
P.S. Je moet natuurlijk wel zorgen dat /var/opt/app/certs
bestaat.
Voor Red-Hat-gebaseerde Linuxsystemen (zoals dat van mij) moet je natuurlijk ook nog
wel wat prutsen met SELinux omdat /var/opt/app/certs
geen standaardwebserverpath is.
De context moet op httpd_sys_content_t
staan:
semanage fcontext -a -t httpd_sys_content_t "/var/opt/app/certs(/.*)?"
En dan natuurlijk ook de configuratie activeren:
restorecon -Rv /var/opt/app/certs
Tot slot kan je de aanvraag of renewal uitvoeren met Certbot.
certbot certonly --webroot --webroot-path /var/opt/app/certs -d www.example.com
of
certbot renew
Et voila!