Is het SSL-certificaat van je website verlopen of mislukt certbot renew? Controleer de timer, poort 80, DNS en CAA, vernieuw het certificaat en herlaad de webserver.
Certificaten van Let’s Encrypt zijn 90 dagen geldig. Dat is bewust kort: de verlenging hoort volledig automatisch te gaan. certbot (het meestgebruikte programma daarvoor) probeert een certificaat te vernieuwen zodra het minder dan 30 dagen geldig is, via een systemd-timer of cronjob. Gaat dat een tijd stil mis, dan verloopt het certificaat en zien bezoekers NET::ERR_CERT_DATE_INVALID.
Bij elke verlenging controleert Let’s Encrypt dat jij het domein beheert. Meestal via de HTTP-01-controle: Let’s Encrypt vraagt een bestand op onder http://domein.nl/.well-known/acme-challenge/. Dat moet via poort 80 bereikbaar zijn, op de server waar certbot draait. Een firewall die poort 80 dichtzet, een doorverwijzing die dat pad onbereikbaar maakt, DNS die naar een andere server wijst of een CAA-record dat Let’s Encrypt niet toestaat, laat die controle mislukken.
En soms slaagt de verlenging wel, maar is de webserver niet herladen. Dan staat het nieuwe certificaat op schijf en serveert de webserver nog steeds het oude. Let’s Encrypt heeft bovendien aangekondigd de looptijd van certificaten verder in te korten. Goed werkende automatische verlenging en bewaking worden dus steeds belangrijker.
NET::ERR_CERT_DATE_INVALID en openssl … -dates toont een notAfter in het verleden.certbot renew of het log meldt Some challenges have failed, een timeout of een 404 op /.well-known/acme-challenge/.certbot certificates toont een nieuwe vervaldatum, maar de browser toont de oude: de webserver is niet herladen.Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Vergelijk wat certbot denkt met wat de server echt aanbiedt. Wijkt de datum van openssl af van die van certbot certificates, dan gebruikt de webserver een ander bestand of is hij niet herladen.
sudo certbot certificates
openssl s_client -connect domein.nl:443 -servername domein.nl </dev/null 2>/dev/null | openssl x509 -noout -datesEen droge run doet de hele controle tegen de testomgeving van Let’s Encrypt, zonder iets te vervangen. De foutmelding vertelt welke stap faalt. Meer detail staat in het log.
sudo certbot renew --dry-run
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.logBij een installatie via de pakketbeheerder heet de timer meestal certbot.timer, bij een snap-installatie snap.certbot.renew.timer. Staat er geen timer, kijk dan in /etc/cron.d/ naar een cronjob voor certbot.
systemctl list-timers | grep certbot
sudo journalctl -u certbot.service --since "7 days ago"
ls /etc/cron.d/ | grep -i certbotLet’s Encrypt moet het controlebestand via http op poort 80 kunnen ophalen. Zet poort 80 open in de firewall, ook als je site alleen https gebruikt. Een doorverwijzing van http naar https is prima, zolang het pad /.well-known/acme-challenge/ daarna nog werkt. Test met een eigen bestand in de webroot.
sudo ufw status
sudo ufw allow 80/tcp
sudo mkdir -p /var/www/html/.well-known/acme-challenge
echo test | sudo tee /var/www/html/.well-known/acme-challenge/test
curl -i http://domein.nl/.well-known/acme-challenge/testHet domein (en www) moet naar deze server wijzen, ook via IPv6 als er een AAAA-record staat. Een CAA-record bepaalt welke uitgevers certificaten voor je domein mogen maken; staat er een CAA-record zonder Let’s Encrypt, dan weigert die. Met de domeincheck zie je de records ook.
dig +short domein.nl A
dig +short domein.nl AAAA
dig +short www.domein.nl A
dig +short domein.nl CAA
# toegestaan voor Let's Encrypt:
# 0 issue "letsencrypt.org"Werkt de droge run, vernieuw dan echt. Laat certbot daarna voortaan zelf de webserver herladen met een deploy-hook: die draait alleen als er werkelijk een nieuw certificaat is. Controleer daarna opnieuw met openssl.
sudo certbot renew
sudo nginx -t && sudo systemctl reload nginx
# Apache: sudo apachectl configtest && sudo systemctl reload apache2
# voortaan automatisch herladen:
sudo certbot renew --deploy-hook "systemctl reload nginx"Lukt verlengen niet, vraag dan een nieuw certificaat aan met alle namen. Met de nginx- of Apache-plugin regelt certbot ook de configuratie. Draai je zelf een andere webserver, gebruik dan de webroot-methode.
sudo certbot --nginx -d domein.nl -d www.domein.nl
# of met webroot:
sudo certbot certonly --webroot -w /var/www/html -d domein.nl -d www.domein.nlNa een nieuw certificaat kan de site nog onderdelen via http laden, waardoor het slotje ontbreekt. Zie mixed content na SSL. Gebruikt je site HSTS, dan konden bezoekers in de tussentijd niet doorklikken; zie HSTS-fout. Een website-scan laat zien of alles weer klopt.
Let op: Vraag niet steeds opnieuw een certificaat aan als het mislukt: Let’s Encrypt heeft limieten op het aantal (mislukte) aanvragen. Test eerst met --dry-run en los de oorzaak op.
Automatische verlenging is pas betrouwbaar als iemand merkt wanneer hij faalt. Reken er niet op dat je vanzelf een herinnering krijgt.
certbot renew --dry-run.Loopt de site via een CDN of proxy, dan heeft die meestal een eigen certificaat voor bezoekers. Het certificaat op je eigen server moet dan nog steeds geldig zijn als het CDN in een strikte modus naar je server verbindt.
Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
90 dagen. certbot probeert te verlengen zodra er minder dan 30 dagen over zijn, zodat er ruim tijd is om een mislukte verlenging op te merken.
De standaardcontrole van Let’s Encrypt (HTTP-01) haalt een bestand op via http op poort 80. Een doorverwijzing naar https mag, maar de poort moet bereikbaar zijn.
Herlaad de webserver. Zet een deploy-hook zodat certbot dat voortaan zelf doet.
Het geeft aan welke certificaatuitgevers voor je domein certificaten mogen maken. Staat Let’s Encrypt er niet bij, dan weigert die een certificaat uit te geven.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · Gratis website-scan · Alle oplossingen