Risposta breve: No, l'URL è crittografato, ma il dominio (secondario) viene inviato in testo semplice.
Nel tuo caso un attaccante (passivo) sa che ti stai connettendo a example.com
, ma non sa quale pagina specifica stai accedendo.
In breve, ci sono tre volte in cui un utente malintenzionato può ottenere informazioni sul sito a cui si sta accedendo (in ordine cronologico):
- (Sub) dominio nella query DNS
- (Sub) dominio in Client Hello (SNI)
- (Sub) dominio nel certificato del server
Tuttavia il ...
- L'URL viene inviato crittografato tramite TLS
Per maggiori dettagli leggi la spiegazione di seguito.
Spiegazione
Nota: quando scrivo "(sub) dominio", intendo sia il dominio ( example.com
) che il sottodominio ( mydomain.example.com
). Quando scrivo solo "dominio", intendo solo il dominio ( example.com
) senza il sottodominio.
Fondamentalmente ciò che accade è:
- Digiti link .
- Il browser invia il (sotto) dominio in un'estensione TLS speciale (chiamata SNI )
- Ad un certo punto il browser ottiene il certificato SSL dal server.
A seconda del certificato * questo include anche il sottodominio a cui ti stai connettendo, ma potrebbe anche includere più di un sottodominio e anche più di un dominio. Pertanto, il cert di example.com
può anche includere www.example.com
, devserver.example.com
e how-to-develop-tls.example
. Queste voci sono chiamate Nomi alternativi oggetto e il certificato è valido per tutti loro.
- Dopo che il client ha verificato il certificato e il client & il server sceglie una cifra il traffico è crittografato .
-
Dopo che tutto ciò è successo, viene inviata una "normale" richiesta HTTP (sul canale TLS protetto). Ciò significa che questa è la prima volta nell'intera richiesta in cui viene visualizzato URL completo . La richiesta, ad es. assomiglia a questo:
GET /supersecretpage HTTP/1.1
Host: example.com
[...]
* Se il certificato è un certificato jolly, non include i sottodomini, ma solo *.example.com
.
Un'altra cosa vale la pena menzionare: prima che la connessione possa essere stabilita, tutto il client deve risolvere il nome DNS. Per fare ciò invia query DNS non crittografate a un server DNS e queste contengono anche il (sotto) dominio , che può quindi essere utilizzato da un utente malintenzionato per vedere i domini visitati .
Tuttavia questo non deve sempre accadere in questo modo, perché si presuppone che l'utente digiti manualmente in https://example.com/supersecretpage
nella barra degli URL. Ma questo è molto raro come la maggior parte degli utenti, ad es. preferirebbe digitare example.com/supersecretpage
. Un altro problema potrebbero essere i visitatori che fanno clic su un link non sicuro , che utilizza HTTP - in contrasto con un collegamento HTTPS sicuro ). Tali collegamenti potrebbero ad es. essere vecchi collegamenti creati quando il sito non supportava HTTPS o non ha reindirizzato a HTTPS per impostazione predefinita.
Mi chiedi perché questo è importante?
In questo caso (normale) non c'è https://
nell'URL. Quando nessun protocollo viene inserito nella barra degli URL tutti i browser internamente "convertono" questo URL in http://example.com/supersecretpage
(notare il link ) in quanto non possono aspettarsi che il server supporti HTTPS.
Ciò significa che il browser tenta innanzitutto di connettersi al sito Web utilizzando HTTP non sicuro e solo dopo che il sito Web invia un reindirizzamento (301) all'URL HTTPS che utilizza la modalità protetta.
In questo caso, l'autore dell'attacco può visualizzare l'URL completo nella richiesta HTTP non crittografata.
Puoi testarlo da solo esaminando il "pannello di rete" del tuo browser. Dovresti vedere questo "upgrade HTTPS":
Tuttavia, si noti che esistono tecniche per impedire questa prima richiesta HTTP non sicura. In particolare HSTS e - per proteggere anche la prima connessione che fai al sito - precarico HSTS , ma anche HTTPS Ovunque aiuta contro tali attacchi. A proposito: Secondo Netcraft 95 % di tutti i server HTTPS vulnerabili erano vulnerabili a tali attacchi (stripping SSL) a partire da marzo 2016.