Granskning av HTTPS-konfiguration

Klistra in en webbplats svarsrubriker — och, om man har dem, dess certifikat, ett utdrag ur sidans källkod och värdnamnet — så rapporterar den här sidan hur HTTPS-delen är konfigurerad: om HSTS är satt och hur länge, om en innehållssäkerhetspolicy uppgraderar osäkra förfrågningar, om cookies är markerade Secure och SameSite, om en serverbanner avslöjar en version, och vad proxyrubrikerna säger om förfrågan som applikationen faktiskt såg. Certifikatet granskas i samma rapport, vanliga http://-underresurser räknas ut ur sidans källkod, och de kommandon som kan se handskakningen listas för att köras av användaren själv. Allt körs i webbläsaren och sidan gör ingen egen förfrågan.
1. Svarsrubriker
Hela svarsrubrikblocket, statusraden inkluderad. Enklaste källan: curl -sI https://example.com/ i en terminal, eller fliken Rubriker i nätverkspanelen i webbläsarens utvecklarverktyg, kopierat från filens början. Extra rubriker läses och ignoreras; endast de HTTPS-relevanta rapporteras.
2. Certifikat eller kedja (valfritt)
När detta är ifyllt innehåller samma rapport även den fullständiga certifikatgranskningen, så konfiguration och certifikat läses tillsammans. PEM, en ren base64- eller hexadecimal kropp och ett PKCS#7 .p7b fungerar alla; certifikatkontrollen går in på certifikatet ensam, mer djupgående.
3. Utdrag ur sidkällan (valfritt)
Klistra in sidans källkod (eller bara taggarna med URL:er) så listas varje vanlig http://-adress, eftersom en underresurs som laddas över HTTP bryter hänglåset och kan skrivas om under överföringen även när sidan i sig kom över HTTPS. Adresser till webbplatsens egen värd lyfts fram separat, eftersom det är dem en relativ URL skulle åtgärda.
4. Värdnamn (valfritt)
Med ett värdnamn här kontrollerar granskningen de alternativa ämnesnamnen på samma sätt som en webbläsare gör, inklusive jokerreglerna, och matchar vanliga http://-adresser mot det.
inget granskat ännu
Exemplet är medvetet ofullständigt, så att varje del av rapporten har något i sig: ett rubrikblock med HSTS och en innehållssäkerhetspolicy (men utan preload och en cookie utan SameSite), en kedja med två certifikat, och ett sidutdrag som laddar ett skript över vanlig http:// och pekar en bild mot webbplatsens egen värd på samma sätt. Förvänta ett F på exemplet och läs fynden nedanför för att se vad vart och ett betyder.
Vad som kontrolleras. Från rubrikblocket: HSTS, dess max-age, includeSubDomains och preload; en innehållssäkerhetspolicy som uppgraderar osäkra förfrågningar; flaggorna Secure, HttpOnly och SameSite på varje Set-Cookie; en serverbanner som anger en produkt och en version; och de vidarebefordrade rubriker som visar om applikationen såg förfrågan som HTTPS. Från certifikatblocket: hela certifikatgranskningen, ner till om varje länk i kedjan verkligen signerat nästa. Från sidans källkod: underresurserna över vanlig http://. De tre redovisas var för sig och sammanfattas sedan tillsammans, eftersom en trasig hänglås oftast beror på en av dessa tre och inte på de andra två. För hela OWASP-listan över säkerhetsrubriker i svar — X-Content-Type-Options, ramskydd, Referrer-Policy, Permissions-Policy, COOP, COEP, CORP och det betygsatta poängvärdet — klistra in samma rubrikblock i sidan Kontroll av säkerhetsrubriker; de två sidorna delar upp arbetet längs TLS-lagret och rubriklagret.

Vad den inte kan se. Den här sidan öppnar aldrig en TLS-anslutning. Webbläsare exponerar inte handskakningen för en sida, så protokollversionen, chiffersviten, nyckelutbytesgruppen, OCSP-stapling, sessionsåterupptagning, 0-RTT, certifikatkedjan som en levande server faktiskt skickar, och om en HTTP till HTTPS-omdirigering sker på ursprunget eller i en proxy ligger utanför vad någon webbsida kan rapportera. Den kan inte heller nå en tredjepartssida för att hämta rubrikerna åt någon, och den kan inte säga om ett certifikat är betrott, eftersom det beror på en rotlagring som en sida inte kan läsa. Kommandona längre ned på sidan ser dessa saker, och de är avsedda att köras av användaren, på en egen maskin.

Var man får rubrikblocket. I en terminal skriver curl -sI https://example.com/ exakt det som den här sidan vill ha. I en webbläsare öppnar man utvecklarverktygen, går till fliken Nätverk, laddar om sidan, väljer dokumentbegäran och kopierar hela området Svarsrubriker, eller använder Kopiera → Kopiera svarsrubriker. För omdirigeringskontrollen, kör även curl -sI http://example.com/ och klistra in båda blocken; sidan rapporterar dem efter varandra.
Inget granskat ännu. Klistra in ett rubrikblock ovan och tryck på Granska den här konfigurationen för hela rapporten; ett certifikat, ett utdrag ur sidkällan och ett värdnamn är valfria och lägger var och en till sin egen sektion.
Nåbarhetsprov — den enda delen av sidan som använder nätverket
En sida kan inte öppna en TLS-anslutning, men den kan försöka en vanlig förfrågan. Om webbplatsen tillåter läsning över ursprung visar den URL svaret till slut landar på om http:// omdirigerades till https://, och det är allt detta kan bevisa. Om förfrågan misslyckas kan den här sidan inte säga om värden är nere, om den egna anslutningen är nere, eller om webbplatsen helt enkelt inte tillåter läsning över ursprung — det sista är det vanliga fallet, eftersom de flesta webbplatser inte skickar Access-Control-Allow-Origin. En http://-URL besvaras före någon omdirigering, så det här är det enda i sidan som en webbläsare kommer att försöka över en vanlig anslutning. Inget lämnar webbläsaren förrän man trycker på knappen.
Kommandon som ser handskakningen
curl -sI https://example.com/ # the header block this page reads curl -sI http://example.com/ # is plain HTTP answered, or redirected? curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' http://example.com/ openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null 2>/dev/null \ | openssl x509 -noout -subject -issuer -dates -ext subjectAltName nmap --script ssl-enum-ciphers -p 443 example.com testssl.sh example.com # or: docker run --rm -ti drwetter/testssl.sh example.com
Dessa är avsedda att köras av användaren, på en maskin man kontrollerar, mot en värd man har tillstånd att testa. Utdata från -showcerts kan klistras in direkt i certifikatkontrollen, och rubrikutdata tillbaka i den här sidan.
Certifikatet är ett offentligt dokument. Varje publikt betrott certifikat publiceras i loggar för certifikattransparens, så vilket värdnamn som helst i ett sådant — även ett internt eller felstavat namn som en publik certifikatutfärdare signerade — kan hittas genom att söka i loggarna. Ett certifikat bär också de återkallelseadresser utfärdaren valt, och de nämner ibland en intern värd. Det är därför certifikatet ett CDN serverar inget säger om ursprungsservern: namnen i det tillhör CDN:et. Om granskningen visar ett värdnamn man inte väntade sig, betrakta det som offentligt och ersätt det som skyddas.

Integritet: rubrikblocket, certifikatet och sidans källkod läses lokalt och laddas aldrig upp, och ingen förfrågan av något slag görs om inte man trycker på knappen i nåbarhetsprovet. För att skapa ett eget certifikat, använd generatorn för självsignerade certifikat; för att kontrollera att en privat nyckel hör till ett certifikat, använd matcharen för certifikat och nyckel.