De waarschuwing verschijnt in vrijwel elke moderne browser, maar elke browser kiest een eigen tekst en eigen foutcode. De code is dat zegt het meest over wat er aan de hand is:
Chrome / Edge / Brave
- "Your connection is not private. Attackers might be trying to steal your information…"
- Foutcodes:
NET::ERR_CERT_DATE_INVALID,NET::ERR_CERT_AUTHORITY_INVALID,NET::ERR_CERT_COMMON_NAME_INVALID,NET::ERR_CERT_REVOKED,NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM,NET::ERR_CERT_SYMANTEC_LEGACY
Firefox
- "Warning: Potential Security Risk Ahead" of "Did Not Connect: Potential Security Issue"
- Foutcodes:
SEC_ERROR_EXPIRED_CERTIFICATE,SEC_ERROR_UNKNOWN_ISSUER,SSL_ERROR_BAD_CERT_DOMAIN,MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
Safari
- "This Connection Is Not Private" of "Safari Can't Verify the Identity of the Website"
- Vaak met de toevoeging "This website may be impersonating ..."
Dezelfde site zonder issue zou groen slot tonen. Met issue: rood waarschuwingsscherm en bezoekers haken massaal af. Voor commerciële sites is dit een directe omzet-killer.
Wat is een SSL-certificaatfout eigenlijk?
Bij een HTTPS-verbinding doet de browser drie checks op het certificaat:
- Geldigheid in tijd: ligt vandaag tussen "Not Before" en "Not After" van het certificaat?
- Geldigheid voor dit domein: vermeldt het certificaat het domein dat je bezoekt? (Common Name of Subject Alternative Name)
- Vertrouwde uitgever: is het ondertekend door een Certificate Authority die de browser kent en accepteert?
Faalt één van de drie, dan blokkeert de browser. De foutcode vertelt je welke. Hieronder per code wat 't betekent en hoe je 't fixt.
De acht meest voorkomende SSL-foutcodes
1. NET::ERR_CERT_DATE_INVALID / SEC_ERROR_EXPIRED_CERTIFICATE
Betekenis: certificaat is verlopen, óf nog niet geldig (zeldzaam — net uitgegeven en je systeemklok loopt voor).
Verreweg de meest voorkomende oorzaak. Let's Encrypt-certificaten zijn 90 dagen geldig en moeten elke ~60 dagen automatisch hernieuwd worden. Als auto-renewal stuk gaat, krijg je 90 dagen later een verlopen cert.
Diagnose:
# Check expiry-datum via SSH
echo | openssl s_client -servername jouwsite.nl -connect jouwsite.nl:443 2>/dev/null \
| openssl x509 -noout -dates
Of via SSL Labs — geeft uitvoerige diagnose en flagged expiry direct.
Fix:
- Hosting-paneel (Plesk/cPanel/DirectAdmin): vrijwel elk paneel heeft een Let's Encrypt-knop. Klik 'm — nieuw cert in 30 seconden actief
- Certbot via SSH:
certbot renew - Bij betaalde certificaten: bestel verlenging bij je SSL-leverancier of switch naar Let's Encrypt (gratis, automatisch). Zie SSL/TLS certificaten — Let's Encrypt vs betaald
- Auto-renewal activeren: meeste hosters doen 't standaard, check dat 't op staat. Bij eigen server:
certbot renewin cron
Belangrijk om te checken: jouw browser systeemklok. Als jouw computer drie maanden voorloopt, denkt 'ie dat álle certificaten verlopen zijn. Test eerst op een ander apparaat.
2. NET::ERR_CERT_AUTHORITY_INVALID / SEC_ERROR_UNKNOWN_ISSUER / MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
Betekenis: het certificaat is óf self-signed (door jezelf ondertekend, geen erkende CA), óf de browser kent de uitgevende CA niet.
Veelvoorkomende scenario's:
- Self-signed: bij testomgevingen of een net opgezette server zonder echt certificaat. Voor productie nooit goed
- Onvolledige cert chain: jouw cert is geldig, maar de "intermediate CA" ontbreekt in de installatie. Browser kan dan de keten naar de root CA niet afmaken
- Rogue CA: certificaat van een onbekende of niet-vertrouwde uitgever
Diagnose: SSL Labs is de snelste. Check kolom "Certification Paths" — als je daar "Trust: NOT TRUSTED" of een onvolledige chain ziet, is dat je probleem.
Fix bij missing chain: bij installatie van betaald certificaat moet je behalve certificate.crt ook chain.crt (of intermediate.crt) installeren. In Plesk vaak één bestand "CA certificate". In cPanel: bij "Install SSL Certificate" → het CABUNDLE-veld vullen.
Fix bij self-signed: vervang door echt certificaat. Let's Encrypt gratis (zie SSL artikel).
3. NET::ERR_CERT_COMMON_NAME_INVALID / SSL_ERROR_BAD_CERT_DOMAIN
Betekenis: certificaat is geldig en vertrouwd, maar uitgegeven voor een ander domein dan dat je bezoekt.
Klassieke scenario's:
- Cert is voor
example.com, bezoeker komt opwww.example.com— beide moeten in cert staan - Site verhuisd naar nieuwe domeinnaam, cert nog op oude
- Multi-domain hosting waar een verkeerde cert geserveerd wordt
- Subdomein zonder eigen cert (bijvoorbeeld
shop.example.comterwijl cert alleenexample.comdekt)
Diagnose: bekijk welke domeinen in het cert staan via SSL Labs ("Common Names" en "Alternative Names" velden) of via openssl:
echo | openssl s_client -servername jouwsite.nl -connect jouwsite.nl:443 2>/dev/null \
| openssl x509 -noout -text | grep -A1 "Subject Alternative Name"
Fix: nieuw certificaat aanvragen dat alle benodigde domeinen dekt. Bij Let's Encrypt is dat één commando met meerdere -d flags:
certbot --nginx -d example.com -d www.example.com -d shop.example.com
Of via je hosting-paneel: bij SSL-installatie alle subdomeinen aanvinken die het cert moet dekken.
4. NET::ERR_CERT_REVOKED
Betekenis: het certificaat was geldig, maar de uitgever heeft het ingetrokken (revoked). Vaak omdat de private key gelekt is, of bij twijfel over de eigenaarschap.
Fix: nieuw certificaat aanvragen. Als 't om Let's Encrypt gaat, simpelweg opnieuw uitgeven. Bij betaalde providers: contact opnemen met de leverancier voor reissue.
5. NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM / NET::ERR_CERT_SYMANTEC_LEGACY
Betekenis: certificaat gebruikt een verouderd algoritme (SHA-1, MD5) dat moderne browsers niet meer accepteren. Of: cert komt van Symantec/VeriSign vóór een bepaalde datum (browsers hebben Symantec-CA's vanaf 2018 vertrouwen ontnomen).
Fix: nieuw certificaat aanvragen bij een moderne CA — Let's Encrypt, DigiCert, Sectigo, GeoTrust. Geen reden meer om oude legacy-certs te gebruiken.
6. ERR_SSL_PROTOCOL_ERROR / SSL_ERROR_NO_CYPHER_OVERLAP
Betekenis: server en browser kunnen geen gemeenschappelijke encryptie-set vinden. Vaak: server staat op verouderde TLS-versie (1.0 of 1.1) die moderne browsers afwijzen, of de server-cipher-config is heel beperkt.
Fix: TLS 1.2 en 1.3 enable, oudere versies disable. In Apache:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE+AESGCM:ECDHE+CHACHA20
In Plesk en cPanel zit dit meestal in de SSL/TLS-instellingen. Op shared hosting: support contacten.
7. ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Verwante categorie: server eist een TLS-versie die de browser niet ondersteunt, of vice versa. Vooral oude IE/Edge-installaties op Windows 7 lopen hier tegenaan.
Fix: server config moderniseren. Ondersteun TLS 1.2 én 1.3 — niet alleen 1.3 (Windows 7 / oude Android missen 1.3-support).
8. Mixed Content warnings
Niet hetzelfde als bovenstaande blokkades, maar belangrijke buurman: "Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure resource 'http://...'." Je site staat op HTTPS maar laadt afbeeldingen, scripts of CSS via HTTP. Browser toont waarschuwing-icoon naast het slot, blokkeert sommige resources, en in sommige browsers verschijnt 'connection is not fully secure'.
Diagnose: open browser devtools → Console → zoek "Mixed Content" warnings. Geeft je een lijst URL's die je moet aanpassen.
Fix:
- Plugin "Better Search Replace" (WordPress) — vervang
http://jouwsite.nldoorhttps://jouwsite.nlin de hele database - Bij hardcoded URLs in theme of code: handmatig aanpassen
- Bij externe assets (CDN, embeds): zorg dat de externe partij ook HTTPS aanbiedt, of host lokaal
- In .htaccess:
Content-Security-Policy: upgrade-insecure-requestsals noodfix (alleen tijdelijk)
Stap-voor-stap diagnose
- Lees de exacte foutcode in browser. Klik "Advanced" / "Geavanceerd" — daaronder staat
NET::ERR_CERT_xxxofSEC_ERROR_xxx - Test op meerdere apparaten: zelfde fout op telefoon, andere computer, vrienden? Dan is het server-side. Alleen op één machine? Lokaal probleem (klok, antivirus, oude root-certs)
- Run SSL Labs test: ssllabs.com/ssltest/ — geeft uitgebreide diagnose, vrijwel altijd inclusief root-cause
- Check expiry: openssl-commando hierboven of SSL Labs "Not After"-datum
- Check chain: SSL Labs "Certification Paths" — is keten compleet en vertrouwd?
- Check domeinmatch: staat het domein dat je bezoekt in de cert (CN of SAN)?
- Bij intermittent: verschillende servers achter een load balancer? Niet alle nodes hebben mogelijk dezelfde cert
Alleen één bezoeker zegt 't — anderen niet
De fout is dan lokaal aan die ene bezoeker:
- Systeemklok ontspoord: hun computer/telefoon staat een paar maanden in de toekomst of verleden. Klok corrigeren lost 't op
- Antivirus die HTTPS-inspectie doet: Kaspersky, Avast, ESET vervangen je echte cert door een eigen "scanner"-cert. Vaak slecht geïnstalleerd → fout
- VPN / proxy met SSL-inspection: zelfde verhaal, vooral op corporate netwerken
- Verouderde root-certs op het apparaat: Windows 7, oude Android (vóór 2017) missen recent uitgegeven CA-roots. Vrijwel niet op te lossen behalve apparaat-update
- Browser-cache van oude cert-state: browser cache + cookies wissen voor jouw domein
Adviseer de bezoeker dan om te testen op een ander apparaat. Lukt 't daar wel, dan ligt 't bij hun apparaat — niet bij je site.
Preventie
- Auto-renewal verifiëren: na installatie van Let's Encrypt, plan een check 60 dagen later. Werkt renewal? Krijg je notificatie bij falen?
- Monitoring opzetten: services als SSLmate of UptimeRobot SSL-monitoring — alert 14-30 dagen voor expiry
- Cert-domeinen synchroon houden met je actieve domeinen. Nieuwe subdomain? Cert opnieuw uitgeven met die erin
- Bij DNS-validatie (DNS-01 challenge): zorg dat je DNS-provider API-toegang biedt voor automatic renewal
- Bij Cloudflare: Universal SSL is gratis en wordt automatisch verlengd. Combineer met origin-cert voor "Full (strict)"-mode
- Backup van cert-bestanden: bij hosting-migratie heb je
cert.pem,privkey.pemenchain.pemnodig. Anders moet je opnieuw uitgeven
Wanneer schakel je hulp in?
- Cert is geïnstalleerd maar SSL Labs geeft "B" of lager (config-issue, niet meteen zichtbaar voor bezoekers maar wel voor moderne browsers binnen tijd)
- Auto-renewal werkt al maanden niet en je weet niet hoe je 't terug aan de praat krijgt
- Multi-domain hosting waar verkeerde cert geserveerd wordt en je geen toegang hebt tot server-config
- Migratie naar nieuwe hosting met cert-overdracht — vaak gaat 't dan stuk
- Site staat achter Cloudflare en de "origin"-cert geeft mismatch terwijl de "edge"-cert prima is
- Cipher- of TLS-versie-issue waar oude bezoekers (Windows 7, oude Android) niet meer binnenkomen — vraagt om configuratie-balans tussen security en compatibility
- Custom server (eigen VPS/dedicated) en certbot weigert te draaien
SSL-fouten zijn in 90% van de gevallen één van de drie scenario's: cert verlopen, missing chain, of verkeerde domein-naam. Met de browserfoutcode en een SSL Labs-scan vind je dat in 5 minuten. De zeldzame complexere gevallen — TLS-config, Cloudflare-edge-vs-origin-mismatch, mixed content cleanup — vragen wat ervaring. Maar 99% lost zichzelf op met "vernieuw certificaat".