- Probleem: Letsencrypt certificate renewal proces faalt
- Omgeving: DietPi met Lighttpd webserver. Domein verkeer wordt eventueel omgeleid naar een andere sub-directory van /var/www
- Falende actie: Het verversen van het certificaat via sudo dietpi-letsencrypt faalt met een time-out van de http-01 challenge
- Oplossing/Workaround: Certbot laten draaien met de native, stand-alone webserver
LetsEncrypt maakt gebruik van Certbot om het certificaat aan te vragen of te vernieuwen. Dit kan ook handmatig via sudo certbot renew
In het proces wordt gebruik gemaakt van Lighttpd als bestaande webserver, waarbij Certbot een token bestand aanmaakt in /var/www/.well-known/acme-challenge/ en deze vervolgens opvraagt over http via http://<website_domain_FQN>/.well-known/acme-challenge/<token_bestand>
Het blijkt dat bij gebruik van Lighttpd Certbot de folders en het token bestand aanmaken als gebruiker/groep root, terwijl Lighttpd alleen bestanden aan kan bieden aan webclients die www-data als gebruiker/groep hebben. Het resultaat is dat de http-01 challenge mislukt door een time-out omdat het torenbestand niet opgehaald kan worden.
Een oplossing of workaround hiervoor blijkt te zijn om de ingebouwde webserver van Certbot te gebruiken. Deze moet verbinding maken met de porten die door Lighttpd in gebruik zijn, en daarvoor moet die service eerst afgesloten worden en na de verversing weer worden opgestart. Dit kan op twee wijzen, via de command line en via de config bestanden van Certbot. Hierbij past Certbot de opties van het directe commando aan in het config bestand voor toekomstig gebruik - maar dit betekent waarschijnlijk ook dat bij andere invoer het config bestand niet meer werkt zoals gewenst.
Het directe commando om te gebruiken is:
sudo certbot renew --pre-hook "service lighttpd stop" --post-hook "service lighttpd start" --standalone
Het configuratiebestand voor renewal opdrachten staat op:
/etc/letsencrypt/renewal/<FQN_domain_Name>.conf
Deze ziet er dan zo uit (let op dat de omleiding naar de folder van de website bij het domain niet actief is door # aan het begin van de regel!):
# renew_before_expiry = 30 days version = 1.12.0 archive_dir = /etc/letsencrypt/archive/<FQN_domain_name> cert = /etc/letsencrypt/live/<FQN_domain_name>/cert.pem privkey = /etc/letsencrypt/live/<FQN_domain_name>/privkey.pem chain = /etc/letsencrypt/live/<FQN_domain_name>/chain.pem fullchain = /etc/letsencrypt/live/<FQN_domain_name>/fullchain.pem # Options used in the renewal process [renewalparams] account = <account_token> rsa_key_size = 4096 authenticator = standalone webroot_path = /var/www, server = https://acme-v02.api.letsencrypt.org/directory pre_hook = service lighttpd stop post_hook = service lighttpd start [[webroot_map]] #<FQN_domain_name> = /var/www/<sub-folder>
Met deze config file zou een toekomstige automatische renewal ook moeten werken.
Gebruik https://crt.sh om te kijken of er nieuwe certificaten aan je domein zijn gekoppeld.
Helaas nog niet helemaal het gewenste resultaat na het doorvoeren van bovenstaande tips.
Geeft een failure melding
hjttp://crt.sh geeft trouwens wel aan dat er een nieuw certificaat is. Alleen https werkt nog niet naar nextcloud.
Ik denk dat dit misschien jullie gaat helpen?
@lantern bedankt, maar dit is niet waar ik tegenaan loop.
Roebar creëert wel een nieuw certificaat, maar die wordt niet geïnstalleerd voor gebruik door lighttpd :/ Ook dat is een ander probleem….
En dat hebben we gisteravond opgelost door het samengestelde certificaat in de ‘live’ directory voor het domein handmatig aan te maken (te overschrijven) door als root het volgende commando in te voeren:
cat privkey.pem cert.pem > combined.pem
De eerste twee .pem bestanden in de folder zijn links naar het actieve bestand, terwijl combined.pem leeft in de folder zelf.
Mooi 👍 Nu hopen dat de auto renewal gaat werken want een handmatige actie is nooit bevordelijk voor een automatisch proces. 🧐
Mooi 👍 Nu hopen dat de auto renewal gaat werken want een handmatige actie is nooit bevordelijk voor een automatisch proces. 🧐
Klare taal!
En wat betreft; handmatige actie is nooit bevorderlijk voor een automatisch proces.
Helemaal waar, dus het volgende miniprojectje is om Rsync automatisch z'n ding te laten doen.