✦ Oplossingen · SSL- en certificaatfouten

NET::ERR_CERT_COMMON_NAME_INVALID: certificaat voor andere naam

Chrome meldt NET::ERR_CERT_COMMON_NAME_INVALID? Het certificaat geldt niet voor dit adres, bijvoorbeeld wel voor www maar niet zonder www. Zo vind je de oorzaak en los je het op.

Zo ziet de foutmelding eruit

  • NET::ERR_CERT_COMMON_NAME_INVALID
  • Your connection is not private
  • Uw verbinding is niet privé
  • SSL_ERROR_BAD_CERT_DOMAIN

Waarom gebeurt dit?

Een certificaat geldt voor een vaste lijst namen. Die lijst heet de SAN-lijst (Subject Alternative Name). Moderne browsers kijken alleen naar die lijst; de oude ‘common name’ in het certificaat speelt geen rol meer, ook al zit die nog in de naam van de foutcode. Staat het adres dat je opent er niet in, dan meldt Chrome NET::ERR_CERT_COMMON_NAME_INVALID en Firefox SSL_ERROR_BAD_CERT_DOMAIN.

De meest voorkomende oorzaak: het certificaat is aangevraagd voor domein.nl maar niet voor www.domein.nl (of andersom). Andere oorzaken: een nieuw subdomein zonder eigen certificaat, een wildcard (*.domein.nl) die het hoofddomein zelf of een tweede niveau zoals a.b.domein.nl niet dekt, of een domein dat in DNS naar een server wijst waar het nog niet is ingericht.

Draaien er meerdere sites op één server, dan kiest de webserver het certificaat aan de hand van SNI: de browser noemt bij het opzetten van de verbinding de naam die hij zoekt. Is er geen site ingericht voor die naam, dan valt de server terug op een standaardsite met een certificaat van een ándere website. Dat is dan wat de bezoeker te zien krijgt.

Zo herken je dit probleem

  • Klik in de waarschuwing op Geavanceerd: Chrome noemt vaak voor welke naam het certificaat wél geldt. Een volkomen andere naam wijst op SNI of DNS.
  • Werkt https://www.domein.nl wel en https://domein.nl niet (of andersom)? Dan ontbreekt één naam in het certificaat.
  • Werkt het adres zonder https ook niet, of helemaal niet met en zonder www? Zie www werkt niet zonder www.
  • Is het certificaat verlopen of de uitgever onbekend, dan is het een andere fout: zie ERR_CERT_DATE_INVALID of Uw verbinding is niet privé.

Zo los je het op, stap voor stap

Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.

  1. Controleer het adres

    Kijk of je het juiste adres hebt getypt, zonder tikfout en zonder een oude link naar een subdomein dat niet meer bestaat. Probeer de variant met en zonder www. Werkt één ervan, gebruik die en meld de andere aan de eigenaar.

  2. Beheerder: bekijk de namen in het certificaat

    Vraag de server om het certificaat voor precies de naam die faalt en toon de SAN-lijst. Ontbreekt de naam, dan is dat de oorzaak. Krijg je een certificaat met heel andere namen, dan is er geen site voor deze naam ingericht (SNI).

    openssl s_client -connect domein.nl:443 -servername www.domein.nl </dev/null 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
  3. Beheerder: controleer waar de naam in DNS naartoe wijst

    Wijst www of het subdomein naar een andere server dan de site zelf, dan krijgt de bezoeker het certificaat van die andere server. Vergelijk de IP-adressen met die van de server waarop de site staat. Met de domeincheck zie je ook welke records er staan.

    dig +short domein.nl A
    dig +short www.domein.nl A
    dig +short www.domein.nl CNAME
  4. Beheerder: vraag één certificaat aan voor alle namen

    Met certbot geef je elke naam op met -d. Heb je al een certificaat voor één naam, dan breid je het uit met --expand en herhaal je alle namen. Beide namen moeten in DNS al naar deze server wijzen, anders mislukt de controle.

    sudo certbot --nginx -d domein.nl -d www.domein.nl
    # bestaand certificaat uitbreiden:
    sudo certbot --nginx --expand -d domein.nl -d www.domein.nl
  5. Beheerder: zet de naam in de juiste vhost

    De webserver moet weten dat deze naam bij deze site hoort. In nginx staat dat in server_name, in Apache in ServerName en ServerAlias. Ontbreekt de naam, dan kiest de server de standaardsite met een ander certificaat.

    # nginx
    server {
        listen 443 ssl;
        server_name domein.nl www.domein.nl;
        ssl_certificate     /etc/letsencrypt/live/domein.nl/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domein.nl/privkey.pem;
    }
    
    sudo nginx -t && sudo systemctl reload nginx
  6. Beheerder: wildcard alleen voor één niveau

    Een wildcardcertificaat *.domein.nl dekt shop.domein.nl, maar niet domein.nl zelf en niet test.shop.domein.nl. Neem het hoofddomein dus apart op. Een wildcard van Let’s Encrypt vraag je aan met een DNS-controle (--preferred-challenges dns), niet via poort 80.

  7. Stuur daarna door naar één vaste naam

    Kies één hoofdadres (met of zonder www) en laat de andere variant daar met een 301 naartoe doorverwijzen. Dat kan pas nadat beide namen een geldig certificaat hebben: de browser controleert het certificaat vóórdat hij de doorverwijzing te zien krijgt. Let op dat je geen lus maakt, zie ERR_TOO_MANY_REDIRECTS.

Let op: Een doorverwijzing van domein.nl naar www.domein.nl lost deze fout niet op als domein.nl zelf geen geldig certificaat heeft. De certificaatcontrole komt eerst.

Met een CDN of proxy ervoor

Loopt de site via een CDN zoals Cloudflare, dan ziet de bezoeker het certificaat van het CDN, niet dat van je server. Een nieuw subdomein of een naam op een dieper niveau valt dan soms buiten het standaardcertificaat van het CDN. Controleer in dat geval in het CDN-paneel welke namen het certificaat dekt.

De verbinding tussen CDN en server heeft een eigen certificaat. Fouten dáár geven meestal een foutpagina van het CDN zelf; zie Cloudflare-fout 520, 521, 522.

Wanneer schakel je hulp in?

  • Je weet niet welke server het certificaat uitserveert of welke vhost bij welke naam hoort.
  • Na een verhuizing naar een andere hosting krijgen bezoekers het certificaat van een andere website te zien.
  • certbot weigert een naam toe te voegen en je weet niet of DNS of de webserver de oorzaak is.
  • Er hangt een CDN, proxy of loadbalancer tussen en je weet niet waar het certificaat vandaan komt.

Lukt het niet? Wij helpen

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.

Aanvraag

Hulp aanvragen

Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.

Veelgestelde vragen

Vragen over dit probleem

Waarom werkt www wel en zonder www niet?

Het certificaat is maar voor één van de twee namen aangevraagd. Vraag een certificaat aan met beide namen (-d domein.nl -d www.domein.nl).

Ik zie het certificaat van een andere website. Is mijn site gehackt?

Meestal niet. De server heeft geen site ingericht voor jouw naam en valt terug op een standaardsite, of de DNS wijst naar een andere server. Controleer DNS en de vhost.

Geldt een wildcardcertificaat ook voor het hoofddomein?

Nee. *.domein.nl dekt alleen namen één niveau onder het domein. Zet domein.nl er apart bij.