Guides 7 min läsning

SSL-certifikatfel förklarade: orsaker och lösningar

NET::ERR_CERT_DATE_INVALID, ERR_CERT_COMMON_NAME_INVALID och webbläsarnas andra SSL-varningar förklarade: vad var och en betyder, vad som orsakar den och hur du åtgärdar den på din server.

Ett SSL-certifikatfel betyder att webbläsaren inte kunde upprätta en säker anslutning som den litar på, så den stannar och visar en varning i stället för din webbplats. De vanligaste orsakerna är ett utgånget certifikat (NET::ERR_CERT_DATE_INVALID), ett certifikat som inte täcker domännamnet (ERR_CERT_COMMON_NAME_INVALID), ett certifikat som webbläsaren inte litar på (ERR_CERT_AUTHORITY_INVALID) och en server som skickar en ofullständig certifikatkedja eller använder föråldrade TLS-inställningar. Nästan alla åtgärdas på servern, och det vanligaste, att certifikatet går ut, går helt att förebygga.

Den här guiden går igenom de fel som besökare faktiskt ser, vad som orsakar dem och hur du åtgärdar dem, med kommandon du kan köra för att kontrollera din egen webbplats.

Varför webbläsare blockerar sidan

När en webbläsare ansluter över HTTPS visar servern upp ett certifikat. Webbläsaren kontrollerar tre saker innan den skickar något: att certifikatet är inom sina giltighetsdatum, att det har utfärdats för exakt det värdnamn som står i adressfältet och att det leder tillbaka till en certifikatutfärdare som webbläsaren litar på. Om någon kontroll misslyckas visar webbläsaren en helsidesvarning som ”Din anslutning är inte privat”. De flesta besökare lämnar sidan där. API-klienter och appar visar ingen varning alls; de vägrar ansluta och din integration slutar fungera.

Webbläsarna kallar samma problem olika saker. Så här motsvarar de vanliga felen varandra:

ProblemChrome och EdgeFirefoxUtgånget eller ännu inte giltigtNET::ERR_CERT_DATE_INVALIDSEC_ERROR_EXPIRED_CERTIFICATEFel värdnamnNET::ERR_CERT_COMMON_NAME_INVALIDSSL_ERROR_BAD_CERT_DOMAINOpålitlig utfärdare eller självsigneratNET::ERR_CERT_AUTHORITY_INVALIDSEC_ERROR_UNKNOWN_ISSUERProblem med protokoll eller chifferERR_SSL_PROTOCOL_ERROR, ERR_SSL_VERSION_OR_CIPHER_MISMATCHSSL_ERROR_NO_CYPHER_OVERLAP

Safari visar ”Den här anslutningen är inte privat” för de flesta av dem, med detaljerna under ”Visa detaljer”.

Titta först på certifikatet själv

Innan du åtgärdar något, kontrollera vad servern faktiskt skickar. Det här kommandot visar certifikatets giltighetsdatum, subjekt och de värdnamn det täcker:

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

Flaggan -servername spelar roll. Servrar som är värd för flera webbplatser väljer certifikat utifrån namnet klienten frågar efter, och utan den kan du se fel certifikat. Lägg till -showcerts i det första kommandot för att se hela kedjan som servern skickar.

NET::ERR_CERT_DATE_INVALID

Certifikatet är utanför sin giltighetsperiod. Nästan alltid betyder det att det har gått ut. Mer sällan går klockan fel på besökarens dator, vilket får ett giltigt certifikat att se utgånget eller ännu inte giltigt ut.

Typiska orsaker på serversidan:

Den automatiska förnyelsen slutade fungera efter en serverflytt, ett byte av webbserver eller en DNS-ändring som förstörde domänvalideringen.

Certifikatet förnyades, men webbservern laddades aldrig om, så den levererar fortfarande det gamla från minnet.

Certifikatet utfärdades manuellt för ett år sedan för en subdomän som alla glömt.

En lastbalanserare, ett CDN eller en andra server har fortfarande det gamla certifikatet medan huvudservern har det nya.

Åtgärd: förnya certifikatet, installera det överallt där det används och ladda om tjänsten. Med Certbot visar en testkörning om förnyelsen fungerar innan det gäller:

sudo certbot renew –dry-run
sudo systemctl reload nginx

Kontrollera sedan det levererade certifikatet igen med openssl-kommandot ovan. Det är inte filen på disken som besökarna ser, utan certifikatet som servern levererar.

Om bara en besökare rapporterar felet och certifikatet är giltigt, be hen kontrollera datum och tid på sin enhet.

NET::ERR_CERT_COMMON_NAME_INVALID

Certifikatet är giltigt, men inte för det här värdnamnet. Webbläsare jämför adressfältet med namnen i certifikatets fält Subject Alternative Name.

Vanliga orsaker:

Certifikatet täcker northwind.shop men inte www.northwind.shop, eller tvärtom.

Ett wildcard-certifikat för *.northwind.shop används på shop.eu.northwind.shop. Ett wildcard täcker bara en nivå.

En ny subdomän pekades mot en server som levererar ett standardcertifikat för en annan webbplats.

En DNS-post pekar mot fel server, till exempel en gammal värd eller ett CDN som inte har något certifikat för din domän.

Åtgärd: utfärda ett certifikat som listar alla värdnamn du levererar, eller ett separat per värdnamn, och kontrollera att varje serverblock eller virtuell värd använder rätt certifikat. Om värdnamnet inte alls ska användas, ta bort dess DNS-post.

NET::ERR_CERT_AUTHORITY_INVALID

Webbläsaren litar inte på den som har signerat certifikatet. Orsaker:

Ett självsignerat certifikat, ofta kvar från en testmiljö eller från standardinstallationen av en kontrollpanel.

Ett certifikat från en privat eller intern certifikatutfärdare som används på en publik webbplats.

En ofullständig kedja hos vissa klienter, se nedan.

Något mellan besökaren och servern som avlyssnar anslutningen, till exempel en företagsproxy eller ett antivirusprogram. Då ser bara vissa besökare felet.

Åtgärd: ersätt självsignerade och interna certifikat på publika webbplatser med ett från en allmänt betrodd certifikatutfärdare. Kostnadsfria certifikat från Let’s Encrypt och liknande tjänster är betrodda av alla stora webbläsare.

Ofullständig certifikatkedja

Ditt certifikat är signerat av ett mellancertifikat, som i sin tur är signerat av ett rotcertifikat som webbläsaren litar på. Servern måste skicka både ditt certifikat och mellancertifikatet. Om den bara skickar ditt certifikat beror resultatet på klienten: vissa webbläsare på datorn hämtar det saknade mellancertifikatet själva och visar inget fel, medan andra webbläsare, mobilappar, curl och API-klienter misslyckas. Därför visar sig problemet ofta som ”fungerar för mig, men betalleverantörens webhooks slutar fungera”.

curl rapporterar det så här:

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

Åtgärd: konfigurera servern med filen för hela kedjan. Med Certbot på nginx betyder det fullchain.pem, inte 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 och chifferkonflikter

De här felen betyder att webbläsaren och servern inte kunde enas om hur de ska kommunicera säkert, innan någon certifikatkontroll ens hann göras. Orsakerna kan vara en server som bara erbjuder gamla protokollversioner som TLS 1.0 och 1.1, som dagens webbläsare inte längre accepterar, en felkonfigurerad port som talar vanlig HTTP på 443, en trasig TLS-konfiguration efter en uppgradering eller en brandvägg eller proxy som stör handskakningen.

Åtgärd: aktivera TLS 1.2 och TLS 1.3, använd webbserverns moderna standardchiffer eller en betrodd konfigurationsgenerator, och kontrollera att port 443 verkligen levererar TLS. Du kan testa en specifik protokollversion med openssl:

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

Blandat innehåll

Blandat innehåll (mixed content) är inget certifikatfel, men besökare upplever det ofta som ett. Sidan laddas över HTTPS, men vissa resurser, till exempel skript, bilder, stilmallar eller iframes, hämtas över vanlig HTTP. Webbläsare blockerar osäkra skript och ramar helt, vilket kan förstöra layouten eller funktionerna, och kan visa sidan utan den vanliga säkerhetsindikatorn.

Åtgärd: ändra hårdkodade http://-adresser i mallar, databas och inställningar till https:// eller relativa adresser. I WordPress kommer blandat innehåll ofta från gamla adresser som ligger kvar i inläggens innehåll efter en övergång till HTTPS. Som skyddsnät talar huvudet Content-Security-Policy: upgrade-insecure-requests om för webbläsarna att hämta de resurserna över HTTPS i stället.

För att hitta blandat innehåll innan besökarna gör det genomsöker Uptimechecks övervakning av trasiga länkar din webbplats och dess sitemap varje dag och rapporterar blandat innehåll och trasiga länkar sida för sida.

Förebygg certifikatfel

De flesta certifikatfel är konfigurationsmisstag som du åtgärdar en gång. Utgångsdatum är annorlunda: problemet kommer tillbaka varje gång ett certifikat når slutet av sin livslängd, och det slår gärna till när personen som satte upp förnyelsen har gått vidare. Att förebygga det är en rutin, inte en engångsåtgärd:

Håll en inventering. Lista alla värdnamn som levererar HTTPS, inklusive API:er, adminpaneler, testmiljöer och kunders webbplatser.

Automatisera förnyelsen där det går, och håll koll på var den fortfarande sker manuellt.

Kontrollera det levererade certifikatet efter varje ändring. Det är vid serverflyttar, nya lastbalanserare och DNS-ändringar som förnyelser slutar fungera.

Övervaka utgångsdatumen så att du får en påminnelse veckor innan ett certifikat går ut, medan det finns tid att i lugn och ro åtgärda en förnyelse som misslyckas.

Håll koll på domänen och dess poster också. En domän som löpt ut eller en ändrad DNS-post förstör valideringen, och webbplatsen med den.

Uptimechecks SSL-övervakning håller koll på utgångsdatumet för certifikatet som levereras på varje domän och subdomän du övervakar över HTTPS och skickar påminnelser till dina larmkanaler innan det går ut. Den ingår i alla planer. Kombinera den med övervakning av domänens utgångsdatum och DNS-övervakning, eftersom ett certifikat aldrig är mer pålitligt än domänen och posterna bakom det. Vår guide om övervakning av SSL-certifikatens utgångsdatum har en komplett checklista för förnyelse, och om webbläsaren inte ens hittar din webbplats kan du läsa om DNS_PROBE_FINISHED_NXDOMAIN.

Sammanfattning

Varje SSL-fel är webbläsaren som vägrar lita på en anslutning: för att certifikatet är inaktuellt, utfärdat för ett annat namn, signerat av någon den inte känner till, skickat utan sin kedja eller erbjudet över ett protokoll som den inte längre accepterar. Kontrollera det levererade certifikatet med openssl, rätta konfigurationen, ladda om servern och kontrollera igen. Gör sedan utgångsdatumet till en påminnelse i stället för en incident.

Uptimecheck påminner dig innan certifikat och domäner går ut och larmar när din webbplats slutar svara. Prova gratis i 14 dagar, inget kreditkort krävs.

Frågor

Vad orsakar NET::ERR_CERT_DATE_INVALID?

Nästan alltid ett utgånget certifikat, ofta för att den automatiska förnyelsen slutade fungera eller för att servern inte laddades om efter förnyelsen. Om bara en besökare ser felet kan klockan på hens enhet gå fel.

Varför fungerar min webbplats i Chrome men inte i curl eller en app?

Oftast på grund av en ofullständig certifikatkedja. Vissa webbläsare på datorn hämtar det saknade mellancertifikatet själva, medan curl, mobilappar och API-klienter misslyckas. Leverera filen med hela kedjan.

Täcker ett wildcard-certifikat alla subdomäner?

Det täcker en nivå. Ett certifikat för *.northwind.shop täcker shop.northwind.shop men inte shop.eu.northwind.shop, och det täcker inte själva grunddomänen om den inte också finns med.

Är blandat innehåll ett SSL-certifikatfel?

Nej. Certifikatet kan vara helt i ordning. Blandat innehåll betyder att HTTPS-sidan hämtar vissa resurser över HTTP, och webbläsare blockerar eller flaggar dem. Ändra adresserna till HTTPS.

Läs vidare

Guides 4 min läsning

SSL-certifikatövervakning: missa aldrig en förnyelse igen

Ett utgånget SSL-certifikat förvandlar din webbplats till en varning i webbläsaren. Varför certifikat går ut trots automatisk förnyelse, vad du ska övervaka och hur du ställer in påminnelser som fungerar.

Läs

Driftstopp är historia.

Sätt upp din första övervakning på under en minut, eller ta en titt i livedemon först.

14 dagar gratis · Sedan gratis för 5 övervakningar · Inget kreditkort