En SSL-certifikatfejl betyder, at browseren ikke kunne oprette en sikker forbindelse, den har tillid til. Derfor stopper den og viser en advarsel i stedet for dit website. De mest almindelige årsager er et udløbet certifikat (NET::ERR_CERT_DATE_INVALID), et certifikat, der ikke dækker domænenavnet (ERR_CERT_COMMON_NAME_INVALID), et certifikat, som browseren ikke har tillid til (ERR_CERT_AUTHORITY_INVALID), og en server, der sender en ufuldstændig certifikatkæde eller bruger forældede TLS-indstillinger. Næsten alle rettes på serveren, og den mest almindelige, udløb, kan helt undgås.
Denne guide gennemgår de fejl, besøgende faktisk ser, hvad der forårsager hver af dem, og hvordan du retter dem, med kommandoer, du kan køre for at tjekke dit eget website.
Hvorfor browsere blokerer siden
Når en browser forbinder via HTTPS, præsenterer serveren et certifikat. Browseren tjekker tre ting, før den sender noget: at certifikatet er inden for sin gyldighedsperiode, at det er udstedt til præcis det hostname, der står i adresselinjen, og at det kan føres tilbage til en certifikatudsteder, browseren har tillid til. Hvis et af tjekkene fejler, viser browseren en helsidesadvarsel som “Din forbindelse er ikke privat”. De fleste besøgende forlader siden på det tidspunkt. API-klienter og apps viser slet ingen advarsel: De afviser forbindelsen, og din integration holder op med at virke.
Browsere kalder de samme problemer forskellige ting. Sådan svarer de almindelige fejl til hinanden på tværs af dem:
ProblemChrome og EdgeFirefoxUdløbet eller endnu ikke gyldigtNET::ERR_CERT_DATE_INVALIDSEC_ERROR_EXPIRED_CERTIFICATEForkert hostnameNET::ERR_CERT_COMMON_NAME_INVALIDSSL_ERROR_BAD_CERT_DOMAINUdsteder uden tillid eller selvsigneretNET::ERR_CERT_AUTHORITY_INVALIDSEC_ERROR_UNKNOWN_ISSUERProblem med protokol eller cipherERR_SSL_PROTOCOL_ERROR, ERR_SSL_VERSION_OR_CIPHER_MISMATCHSSL_ERROR_NO_CYPHER_OVERLAP
Safari viser “Denne forbindelse er ikke privat” for de fleste af dem, med detaljerne bag “Vis detaljer”.
Se først selv på certifikatet
Før du retter noget, så tjek, hvad serveren faktisk sender. Denne kommando viser certifikatets gyldighedsdatoer, subject og de hostnames, det dækker:
echo | openssl s_client -connect northwind.shop:443 -servername northwind.shop 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer -ext subjectAltName
Flaget -servername er vigtigt. Servere, der hoster flere websites, vælger certifikatet ud fra det navn, klienten spørger efter, og uden det kan du se det forkerte. Tilføj -showcerts til den første kommando for at se hele den kæde, serveren sender.
NET::ERR_CERT_DATE_INVALID
Certifikatet er uden for sin gyldighedsperiode. Det betyder næsten altid, at det er udløbet. Mindre ofte går den besøgendes computerur forkert, så et gyldigt certifikat ser udløbet eller endnu ikke gyldigt ud.
Typiske årsager på serversiden:
Automatisk fornyelse holdt op med at virke efter en serverflytning, et skift af webserver eller en DNS-ændring, der ødelagde domænevalideringen.
Certifikatet blev fornyet, men webserveren blev aldrig genindlæst, så den serverer stadig det gamle fra hukommelsen.
Certifikatet blev udstedt manuelt for et år siden til et subdomæne, alle har glemt.
En load balancer, et CDN eller en anden server har stadig det gamle certifikat, mens hovedserveren har det nye.
Løsning: Forny certifikatet, installer det alle steder, hvor det serveres, og genindlæs tjenesten. Med Certbot fortæller en dry run dig, om fornyelsen virker, før det gælder:
sudo certbot renew –dry-run
sudo systemctl reload nginx
Tjek derefter det serverede certifikat igen med openssl-kommandoen ovenfor. Det er ikke filen på disken, de besøgende ser, men det certifikat, der serveres.
Hvis kun én besøgende melder om fejlen, og certifikatet er gyldigt, så bed vedkommende tjekke dato og klokkeslæt på sin enhed.
NET::ERR_CERT_COMMON_NAME_INVALID
Certifikatet er gyldigt, men ikke til dette hostname. Browsere sammenligner adresselinjen med de navne, der står i certifikatets Subject Alternative Name-felt.
Almindelige årsager:
Certifikatet dækker northwind.shop, men ikke www.northwind.shop, eller omvendt.
Et wildcard-certifikat til *.northwind.shop bruges på shop.eu.northwind.shop. Et wildcard dækker kun ét niveau.
Et nyt subdomæne blev peget mod en server, der serverer et standardcertifikat til et andet website.
En DNS-record peger på den forkerte server, f.eks. en gammel host eller et CDN, der ikke har et certifikat til dit domæne.
Løsning: Udsted et certifikat, der omfatter alle de hostnames, du serverer, eller et separat certifikat pr. hostname, og tjek, at hver server-blok eller virtuel host bruger det rigtige. Hvis hostnavnet slet ikke skal serveres, så fjern dets DNS-record.
NET::ERR_CERT_AUTHORITY_INVALID
Browseren har ikke tillid til den, der har signeret certifikatet. Årsager:
Et selvsigneret certifikat, ofte efterladt fra et staging-miljø eller fra standardinstallationen af et kontrolpanel.
Et certifikat fra en privat eller intern certifikatudsteder, brugt på et offentligt website.
En ufuldstændig kæde på nogle klienter, se nedenfor.
Noget mellem den besøgende og serveren, der opsnapper forbindelsen, f.eks. en virksomhedsproxy eller et antivirusprogram. I så fald ser kun nogle besøgende fejlen.
Løsning: Erstat selvsignerede og interne certifikater på offentlige websites med et fra en offentligt betroet certifikatudsteder. Gratis certifikater fra Let’s Encrypt og lignende tjenester er betroet af alle større browsere.
Ufuldstændig certifikatkæde
Dit certifikat er signeret af et mellemcertifikat (intermediate), som er signeret af et rodcertifikat, browseren har tillid til. Serveren skal sende både dit certifikat og mellemcertifikatet. Hvis den kun sender dit certifikat, afhænger resultatet af klienten: Nogle desktopbrowsere henter selv det manglende mellemcertifikat og viser ingen fejl, mens andre browsere, mobilapps, curl og API-klienter fejler. Derfor viser problemet sig ofte som “det virker for mig, men betalingsudbyderens webhooks fejler”.
curl rapporterer det sådan her:
curl: (60) SSL certificate problem: unable to get local issuer certificate
Løsning: Konfigurer serveren med filen med hele kæden. Med Certbot på nginx betyder det fullchain.pem, ikke 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 og cipher-uoverensstemmelser
Disse fejl betyder, at browseren og serveren ikke kunne blive enige om, hvordan de skulle kommunikere sikkert, før der overhovedet blev tjekket et certifikat. Årsagerne kan være en server, der kun tilbyder gamle protokolversioner som TLS 1.0 og 1.1, som nuværende browsere ikke længere accepterer, en fejlkonfigureret port, der taler almindelig HTTP på 443, en ødelagt TLS-konfiguration efter en opgradering, eller en firewall eller proxy, der forstyrrer handshaket.
Løsning: Slå TLS 1.2 og TLS 1.3 til, brug din webservers moderne cipher-standarder eller en betroet konfigurationsgenerator, og tjek, at port 443 faktisk serverer TLS. Du kan teste en bestemt protokolversion med openssl:
openssl s_client -connect northwind.shop:443 -servername northwind.shop -tls1_2
Blandet indhold (mixed content)
Blandet indhold er ikke en certifikatfejl, men besøgende oplever det ofte sådan. Siden indlæses via HTTPS, men nogle ressourcer, f.eks. scripts, billeder, stylesheets eller iframes, hentes via almindelig HTTP. Browsere blokerer usikre scripts og frames helt, hvilket kan ødelægge layoutet eller funktionaliteten, og de kan vise siden uden den sædvanlige sikkerhedsindikator.
Løsning: Ret hardcodede http://-URL’er i dine skabeloner, din database og dine indstillinger til https:// eller relative URL’er. På WordPress kommer blandet indhold ofte fra gamle URL’er, der er gemt i indholdet efter en flytning til HTTPS. Som sikkerhedsnet beder headeren Content-Security-Policy: upgrade-insecure-requests browserne om at hente de ressourcer via HTTPS i stedet.
For at finde blandet indhold, før de besøgende gør det, gennemgår Uptimechecks overvågning af døde links dit website og dets sitemap hver dag og rapporterer blandet indhold og døde links side for side.
Sådan forebygger du certifikatfejl
De fleste certifikatfejl er konfigurationsfejl, som du retter én gang. Udløb er anderledes: Det vender tilbage, hver gang et certifikat når slutningen af sin levetid, og det har det med at ramme, når den person, der satte fornyelsen op, er gået videre. Forebyggelse er en rutine, ikke en engangsløsning:
Hold en oversigt. Lav en liste over alle hostnames, der serverer HTTPS, inklusive API’er, administrationspaneler, staging og kunders websites.
Automatiser fornyelsen, hvor du kan, og hold styr på, hvor den stadig er manuel.
Tjek det serverede certifikat efter hver ændring. Serverflytninger, nye load balancere og DNS-ændringer er dér, fornyelser går i stykker.
Overvåg udløbsdatoer, så du får en påmindelse uger før et certifikat udløber, mens der er tid til roligt at rette en fejlende fornyelse.
Hold også øje med domænet og dets records. Et udløbet domæne eller en ændret DNS-record ødelægger valideringen og websitet med den.
Uptimechecks SSL-overvågning følger udløbsdatoen for det certifikat, der serveres på hvert domæne og subdomæne, du overvåger via HTTPS, og sender påmindelser til dine alarmkanaler, før det udløber. Det er inkluderet i alle planer. Kombiner det med overvågning af domæneudløb og DNS-overvågning, for et certifikat er kun så pålideligt som domænet og de records, der ligger bag det. Vores guide til overvågning af SSL-certifikaters udløb har en komplet tjekliste til fornyelse, og hvis browseren slet ikke kan finde dit website, så læs om DNS_PROBE_FINISHED_NXDOMAIN.
Opsummering
Enhver SSL-fejl er browseren, der nægter at stole på en forbindelse: fordi certifikatet er forældet, udstedt til et andet navn, signeret af en, browseren ikke kender, sendt uden sin kæde eller tilbudt via en protokol, den ikke længere accepterer. Tjek det serverede certifikat med openssl, ret konfigurationen, genindlæs serveren, og tjek igen. Gør derefter udløb til en påmindelse i stedet for en hændelse.
Uptimecheck minder dig om det, før certifikater og domæner udløber, og alarmerer dig, når dit website holder op med at svare. Prøv det gratis i 14 dage, uden kreditkort.