Guides 7 min. leestijd

SSL-certificaatfouten uitgelegd: oorzaken en oplossingen

NET::ERR_CERT_DATE_INVALID, ERR_CERT_COMMON_NAME_INVALID en de andere SSL-waarschuwingen in de browser uitgelegd: wat ze betekenen, waardoor ze ontstaan en hoe je ze op je server oplost.

Een SSL-certificaatfout betekent dat de browser geen beveiligde verbinding kon opzetten die hij vertrouwt. Hij stopt dus en toont een waarschuwing in plaats van je site. De meest voorkomende oorzaken zijn een verlopen certificaat (NET::ERR_CERT_DATE_INVALID), een certificaat dat de domeinnaam niet dekt (ERR_CERT_COMMON_NAME_INVALID), een certificaat dat de browser niet vertrouwt (ERR_CERT_AUTHORITY_INVALID) en een server die een onvolledige certificaatketen stuurt of verouderde TLS-instellingen gebruikt. Bijna allemaal los je ze op de server op, en de meest voorkomende, een verlopen certificaat, is volledig te voorkomen.

Deze gids loopt de fouten langs die bezoekers echt te zien krijgen, wat elke fout veroorzaakt en hoe je hem oplost, met commando’s waarmee je je eigen site kunt controleren.

Waarom browsers de pagina blokkeren

Wanneer een browser via HTTPS verbinding maakt, toont de server een certificaat. De browser controleert drie dingen voordat hij iets verstuurt: dat het certificaat binnen zijn geldigheidsdata valt, dat het is uitgegeven voor precies de hostnaam in de adresbalk, en dat het via een keten terugleidt naar een certificaatautoriteit die de browser vertrouwt. Faalt een van die controles, dan toont de browser een waarschuwing over de hele pagina, zoals “Je verbinding is niet privé”. De meeste bezoekers haken op dat punt af. API-clients en apps tonen helemaal geen waarschuwing; ze weigeren de verbinding en je integratie werkt niet meer.

Browsers noemen dezelfde problemen anders. Zo verhouden de gangbare fouten zich tot elkaar:

ProbleemChrome en EdgeFirefoxVerlopen of nog niet geldigNET::ERR_CERT_DATE_INVALIDSEC_ERROR_EXPIRED_CERTIFICATEVerkeerde hostnaamNET::ERR_CERT_COMMON_NAME_INVALIDSSL_ERROR_BAD_CERT_DOMAINOnvertrouwde uitgever of self-signedNET::ERR_CERT_AUTHORITY_INVALIDSEC_ERROR_UNKNOWN_ISSUERProbleem met protocol of cipherERR_SSL_PROTOCOL_ERROR, ERR_SSL_VERSION_OR_CIPHER_MISMATCHSSL_ERROR_NO_CYPHER_OVERLAP

Safari toont bij de meeste hiervan “Deze verbinding is niet privé”, met de details achter “Toon details”.

Bekijk eerst zelf het certificaat

Controleer voordat je iets aanpast wat de server werkelijk stuurt. Dit commando toont de geldigheidsdata van het certificaat, het subject en de hostnamen die het dekt:

echo | openssl s_client -connect northwind.shop:443 -servername northwind.shop 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer -ext subjectAltName

De vlag -servername is belangrijk. Servers die meerdere sites hosten, kiezen het certificaat op basis van de naam die de client opvraagt, en zonder die vlag zie je misschien het verkeerde. Wil je de hele keten zien die de server stuurt, voeg dan -showcerts toe aan het eerste commando.

NET::ERR_CERT_DATE_INVALID

Het certificaat valt buiten zijn geldigheidsperiode. Bijna altijd betekent dat dat het is verlopen. Minder vaak staat de klok op de computer van de bezoeker verkeerd, waardoor een geldig certificaat verlopen of nog niet geldig lijkt.

Typische oorzaken aan de serverkant:

Automatische verlenging werkte niet meer na een serververhuizing, een andere webserver of een DNS-wijziging die de domeinvalidatie brak.

Het certificaat is verlengd, maar de webserver is nooit herladen, dus hij serveert nog steeds het oude uit het geheugen.

Het certificaat is een jaar geleden met de hand uitgegeven voor een subdomein dat iedereen is vergeten.

Een load balancer, CDN of tweede server heeft nog het oude certificaat, terwijl de hoofdserver het nieuwe heeft.

Oplossing: verleng het certificaat, installeer het overal waar het wordt geserveerd en herlaad de service. Met Certbot vertelt een dry run je of verlenging werkt voordat het ertoe doet:

sudo certbot renew –dry-run
sudo systemctl reload nginx

Controleer daarna het geserveerde certificaat opnieuw met het openssl-commando hierboven. Bezoekers zien niet het bestand op de schijf, maar het certificaat dat wordt geserveerd.

Meldt maar één bezoeker de fout en is het certificaat geldig, vraag hem dan de datum en tijd op zijn apparaat te controleren.

NET::ERR_CERT_COMMON_NAME_INVALID

Het certificaat is geldig, maar niet voor deze hostnaam. Browsers vergelijken de adresbalk met de namen in het veld Subject Alternative Name van het certificaat.

Veelvoorkomende oorzaken:

Het certificaat dekt northwind.shop maar niet www.northwind.shop, of andersom.

Een wildcardcertificaat voor *.northwind.shop wordt gebruikt op shop.eu.northwind.shop. Een wildcard dekt maar één niveau.

Een nieuw subdomein is gekoppeld aan een server die een standaardcertificaat voor een andere site serveert.

Een DNS-record wijst naar de verkeerde server, bijvoorbeeld een oude host of een CDN dat geen certificaat voor je domein heeft.

Oplossing: vraag een certificaat aan dat elke hostnaam vermeldt die je serveert, of een apart certificaat per hostnaam, en controleer of elk server block of elke virtual host het juiste gebruikt. Hoort de hostnaam helemaal niet geserveerd te worden, verwijder dan het DNS-record.

NET::ERR_CERT_AUTHORITY_INVALID

De browser vertrouwt degene die het certificaat heeft ondertekend niet. Oorzaken:

Een self-signed certificaat, vaak overgebleven van staging of van de standaardinstallatie van een controlepaneel.

Een certificaat van een private of interne certificaatautoriteit op een publieke site.

Een onvolledige keten bij sommige clients, zie hieronder.

Iets tussen de bezoeker en de server dat de verbinding onderschept, zoals een bedrijfsproxy of antivirussoftware. In dat geval ziet maar een deel van de bezoekers de fout.

Oplossing: vervang self-signed en interne certificaten op publieke sites door een certificaat van een publiek vertrouwde certificaatautoriteit. Gratis certificaten van Let’s Encrypt en vergelijkbare diensten worden door alle grote browsers vertrouwd.

Onvolledige certificaatketen

Je certificaat is ondertekend door een intermediate certificaat, dat weer is ondertekend door een root die de browser vertrouwt. De server moet je certificaat én het intermediate certificaat sturen. Stuurt hij alleen je certificaat, dan hangt het resultaat af van de client: sommige desktopbrowsers halen het ontbrekende intermediate certificaat zelf op en tonen geen fout, terwijl andere browsers, mobiele apps, curl en API-clients falen. Daarom duikt dit probleem vaak op als “bij mij werkt het, maar de webhooks van de betaalprovider falen”.

curl meldt het zo:

curl: (60) SSL certificate problem: unable to get local issuer certificate

Oplossing: configureer de server met het bestand met de volledige keten. Met Certbot op nginx is dat fullchain.pem, niet cert.pem:

ssl_certificate /etc/letsencrypt/live/northwind.shop/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/northwind.shop/privkey.pem;

ERR_SSL_PROTOCOL_ERROR en cipher mismatches

Deze fouten betekenen dat browser en server het niet eens werden over hoe ze veilig communiceren, nog voordat er een certificaatcontrole plaatsvond. Mogelijke oorzaken zijn een server die alleen oude protocolversies zoals TLS 1.0 en 1.1 aanbiedt, die huidige browsers niet meer accepteren, een verkeerd geconfigureerde poort die gewoon HTTP spreekt op 443, een kapotte TLS-configuratie na een upgrade, of een firewall of proxy die de handshake verstoort.

Oplossing: schakel TLS 1.2 en TLS 1.3 in, gebruik de moderne cipher-standaarden van je webserver of een betrouwbare configuratiegenerator, en controleer of poort 443 echt TLS serveert. Met openssl kun je een specifieke protocolversie testen:

openssl s_client -connect northwind.shop:443 -servername northwind.shop -tls1_2

Mixed content

Mixed content is geen certificaatfout, maar bezoekers ervaren het vaak wel zo. De pagina laadt via HTTPS, maar sommige bronnen, zoals scripts, afbeeldingen, stylesheets of iframes, worden via gewoon HTTP opgevraagd. Browsers blokkeren onveilige scripts en frames direct, wat de lay-out of functionaliteit kan breken, en tonen de pagina mogelijk zonder het gebruikelijke slotje.

Oplossing: verander hardgecodeerde http://-URL’s in je templates, database en instellingen in https:// of relatieve URL’s. Bij WordPress komt mixed content vaak van oude URL’s die na de overstap naar HTTPS in de berichtinhoud zijn blijven staan. Als vangnet vertelt de header Content-Security-Policy: upgrade-insecure-requests browsers dat ze die bronnen via HTTPS moeten opvragen.

Om mixed content te vinden voordat bezoekers het doen, crawlt de monitoring van kapotte links van Uptimecheck elke dag je site en sitemap en meldt mixed content en kapotte links per pagina.

Certificaatfouten voorkomen

De meeste certificaatfouten zijn configuratiefouten die je één keer oplost. Verlopen is anders: het komt terug telkens wanneer een certificaat het einde van zijn looptijd bereikt, en het slaat meestal toe wanneer degene die de verlenging heeft ingesteld al vertrokken is. Voorkomen is een routine, geen eenmalige oplossing:

Houd een overzicht bij. Maak een lijst van elke hostnaam die HTTPS serveert, inclusief API’s, beheerpanelen, staging en sites van klanten.

Automatiseer verlenging waar je kunt, en weet waar het nog handwerk is.

Controleer het geserveerde certificaat na elke wijziging. Bij serververhuizingen, nieuwe load balancers en DNS-wijzigingen gaan verlengingen mis.

Monitor vervaldatums, zodat je weken voordat een certificaat afloopt een herinnering krijgt, wanneer er nog tijd is om een mislukte verlenging rustig op te lossen.

Houd ook het domein en zijn records in de gaten. Een verlopen domein of een gewijzigd DNS-record breekt de validatie, en daarmee de site.

De SSL-monitoring van Uptimecheck volgt de vervaldatum van het certificaat dat wordt geserveerd op elk domein en subdomein dat je via HTTPS monitort, en stuurt herinneringen naar je alertkanalen voordat het verloopt. Het zit in elk abonnement. Combineer het met monitoring van domeinverloop en DNS-monitoring, want een certificaat is maar zo betrouwbaar als het domein en de records erachter. Onze gids over monitoring van het verlopen van SSL-certificaten bevat een volledige checklist voor verlenging, en kan de browser je site niet eens vinden, lees dan over DNS_PROBE_FINISHED_NXDOMAIN.

Samenvatting

Elke SSL-fout is een browser die weigert een verbinding te vertrouwen: omdat het certificaat verlopen is, voor een andere naam is uitgegeven, is ondertekend door iemand die hij niet kent, zonder zijn keten wordt gestuurd, of wordt aangeboden via een protocol dat hij niet meer accepteert. Controleer het geserveerde certificaat met openssl, pas de configuratie aan, herlaad de server en controleer opnieuw. Maak van verlopen daarna een herinnering in plaats van een incident.

Uptimecheck herinnert je eraan voordat certificaten en domeinen verlopen en waarschuwt je wanneer je site niet meer reageert. Probeer het 14 dagen gratis, zonder creditcard.

Vragen

Waardoor ontstaat NET::ERR_CERT_DATE_INVALID?

Bijna altijd door een verlopen certificaat, vaak omdat automatische verlenging niet meer werkte of de server na de verlenging niet is herladen. Ziet maar één bezoeker de fout, dan staat de klok op zijn apparaat misschien verkeerd.

Waarom werkt mijn site in Chrome, maar faalt hij in curl of een app?

Meestal door een onvolledige certificaatketen. Sommige desktopbrowsers halen het ontbrekende intermediate certificaat zelf op, terwijl curl, mobiele apps en API-clients falen. Serveer het bestand met de volledige keten.

Dekt een wildcardcertificaat elk subdomein?

Het dekt één niveau. Een certificaat voor *.northwind.shop dekt shop.northwind.shop, maar niet shop.eu.northwind.shop, en het dekt het kale domein niet, tenzij dat ook vermeld staat.

Is mixed content een SSL-certificaatfout?

Nee. Het certificaat kan prima in orde zijn. Mixed content betekent dat de HTTPS-pagina sommige bronnen via HTTP laadt, en browsers blokkeren of markeren die. Zet de URL’s om naar HTTPS.

Lees verder

Guides 4 min. leestijd

SSL-certificaatmonitoring: mis nooit meer een verlenging

Een verlopen SSL-certificaat verandert je site in een browserwaarschuwing. Waarom certificaten ondanks automatische verlenging toch verlopen, wat je moet monitoren en hoe je herinneringen instelt die werken.

Lezen

Guides 5 min. leestijd

DNS monitoring: zo ontdek je gewijzigde of gekaapte records

Een gewijzigd DNS-record kan je bezoekers of e-mail ergens anders heen sturen zonder één enkele foutmelding. Hoe DNS monitoring werkt, welke records je in de gaten houdt en wat je doet als er een verandert.

Lezen

Downtime is verleden tijd.

Stel je eerste monitor in binnen een minuut, of kijk eerst rond in de live demo.

14 dagen gratis proberen · Daarna gratis met 5 monitors · Geen creditcard