Controllo della configurazione HTTPS

Incolli le intestazioni di risposta di un sito — e, se le ha, il suo certificato, un frammento del sorgente della pagina e il nome dell'host — e questa pagina riporta come è configurata la parte HTTPS: se HSTS è impostato e per quanto tempo, se una content security policy aggiorna le richieste non sicure, se i cookie sono marcati Secure e SameSite, se un banner del server rivela una versione, e che cosa dicono le intestazioni di proxy sulla richiesta che l'applicazione ha davvero ricevuto. Il certificato viene verificato nello stesso rapporto, le risorse secondarie http:// in chiaro vengono contate dal sorgente della pagina, e i comandi che possono vedere l'handshake sono elencati perché li esegua lei. Tutto funziona nel suo browser e la pagina non effettua richieste proprie.
1. Intestazioni di risposta
L'intero blocco di intestazioni di risposta, riga di stato inclusa. Fonte più semplice: curl -sI https://example.com/ in un terminale, oppure il pannello Intestazioni della scheda Rete degli strumenti per sviluppatori del browser, copiato dall'inizio. Le intestazioni in più vengono lette e ignorate; vengono riportate solo quelle pertinenti a HTTPS.
2. Certificato o catena (facoltativo)
Con questo campo compilato, lo stesso rapporto contiene anche la verifica completa del certificato, così configurazione e certificato vengono letti insieme. Funzionano PEM, un corpo base64 o esadecimale semplice e un .p7b PKCS#7; il verificatore di certificati analizza il certificato da solo in maggiore profondità.
3. Frammento del sorgente della pagina (facoltativo)
Incolli il sorgente della pagina (o solo i tag con gli URL) e ogni indirizzo http:// in chiaro viene elencato, perché una risorsa secondaria caricata via HTTP rompe il lucchetto e può essere riscritta durante il transito anche quando la pagina stessa è arrivata in HTTPS. Gli indirizzi verso l'host del sito stesso vengono segnalati a parte, poiché sono quelli che un URL relativo correggerebbe.
4. Nome dell'host (facoltativo)
Con un nome di host qui, il controllo verifica i nomi alternativi del soggetto come farebbe un browser, incluse le regole dei jolly, e confronta con esso gli indirizzi http:// in chiaro.
nulla ancora verificato
L'esempio è volutamente imperfetto, così che ogni parte del rapporto abbia qualcosa da mostrare: un blocco di intestazioni con HSTS e una content security policy (ma senza preload e con un cookie privo di SameSite), una catena di due certificati, e un frammento di pagina che carica uno script via http:// in chiaro e punta un'immagine all'host stesso del sito allo stesso modo. Si aspetti una F sull'esempio e legga i risultati sotto per capire che cosa significa ognuno.
Che cosa viene controllato. Dal blocco di intestazioni: HSTS, il suo max-age, includeSubDomains e preload; una content security policy che aggiorna le richieste non sicure; i flag Secure, HttpOnly e SameSite su ogni Set-Cookie; un banner del server che nomina un prodotto e una versione; e le intestazioni inoltrate che indicano se l'applicazione ha visto la richiesta come HTTPS. Dal blocco del certificato: la verifica completa del certificato, fino a stabilire se ogni collegamento della catena ha davvero firmato il successivo. Dal sorgente della pagina: le risorse secondarie http:// in chiaro. Le tre parti sono riportate separatamente e poi riassunte insieme, perché un lucchetto rotto di solito dipende da una di queste tre e non dalle altre due. Per l'elenco OWASP completo delle intestazioni di risposta di sicurezza — X-Content-Type-Options, protezione dal framing, Referrer-Policy, Permissions-Policy, COOP, COEP, CORP e il punteggio — incolli lo stesso blocco di intestazioni nella pagina Verifica intestazioni di sicurezza; le due pagine dividono il lavoro tra il livello TLS e il livello delle intestazioni.

Che cosa non può vedere. Questa pagina non apre mai una connessione TLS. I browser non espongono l'handshake a una pagina, quindi la versione del protocollo, la suite di cifrari, il gruppo di scambio della chiave, lo stapling OCSP, la ripresa della sessione, lo 0-RTT, la catena di certificati che un server attivo invia davvero, e se un reindirizzamento da HTTP a HTTPS avviene all'origine o in un proxy sono tutti fuori da ciò che una pagina web può riportare. Non può nemmeno raggiungere un sito di terzi per raccogliere le intestazioni al suo posto, e non può dirle se un certificato è attendibile, perché questo dipende da un archivio di radici che una pagina non può leggere. I comandi più in basso in questa pagina vedono quelle cose, e sono pensati per essere eseguiti da lei, sulla sua macchina.

Dove ottenere il blocco di intestazioni. In un terminale, curl -sI https://example.com/ stampa esattamente ciò che questa pagina vuole. In un browser, apra gli strumenti per sviluppatori, vada alla scheda Rete, ricarichi la pagina, selezioni la richiesta del documento e copi l'intera area delle intestazioni di risposta, oppure usi Copia → Copia intestazioni di risposta. Per il controllo dei reindirizzamenti, esegua anche curl -sI http://example.com/ e incolli entrambi i blocchi: la pagina li riporta uno dopo l'altro.
Nulla ancora verificato. Incolli un blocco di intestazioni sopra e prema Verifica questa configurazione per il rapporto completo; un certificato, un frammento del sorgente della pagina e un nome di host sono facoltativi e ognuno aggiunge la sua sezione.
Verifica di raggiungibilità — l'unica parte di questa pagina che usa la rete
Una pagina non può aprire una connessione TLS, ma può tentare una normale richiesta. Se il sito consente letture cross-origin, l'URL a cui finisce la risposta mostra se http:// è stato reindirizzato a https://, ed è tutto ciò che questo può provare. Se la richiesta fallisce, questa pagina non può dire se l'host è giù, se la sua connessione è giù, o se il sito semplicemente non consente letture cross-origin — quest'ultimo è il caso comune, perché la maggior parte dei siti non invia Access-Control-Allow-Origin. Un URL http:// riceve risposta prima di qualsiasi reindirizzamento, quindi è l'unica cosa qui che un browser tenterà su una connessione in chiaro. Nulla lascia il browser finché non preme il pulsante.
Comandi che vedono davvero l'handshake
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
Questi sono pensati per essere eseguiti da lei, su una macchina che controlla, contro un host che è autorizzata a testare. L'output di -showcerts può essere incollato direttamente nel verificatore di certificati, e l'output delle intestazioni in questa pagina.
Il certificato è un documento pubblico. Ogni certificato pubblicamente attendibile viene pubblicato nei log di Certificate Transparency, quindi qualsiasi nome di host al suo interno — compreso un nome interno o digitato male che un'autorità di certificazione pubblica ha firmato — può essere trovato cercando in quei log. Un certificato porta anche gli indirizzi di revoca scelti dal suo emittente, e questi a volte nominano un host interno. Per questo il certificato che una CDN serve non dice nulla sul server di origine: i nomi che contiene appartengono alla CDN. Se la verifica fa emergere un nome di host che non si aspettava, lo consideri pubblico e sostituisca ciò che protegge.

Privacy: il blocco di intestazioni, il certificato e il sorgente della pagina vengono letti localmente e non vengono mai caricati, e nessuna richiesta di alcun tipo viene effettuata a meno che non prema il pulsante della verifica di raggiungibilità. Per creare un certificato proprio usi il generatore di certificati autofirmati; per verificare che una chiave privata appartenga a un certificato usi il confronto di certificato e chiave.