Quando avrai
https://encrypted.google.com/search?q=%s
La %s
query è crittografata? O solo la risposta? In caso contrario, perché Google dovrebbe pubblicare i suoi contenuti pubblici anche con la crittografia?
Quando avrai
https://encrypted.google.com/search?q=%s
La %s
query è crittografata? O solo la risposta? In caso contrario, perché Google dovrebbe pubblicare i suoi contenuti pubblici anche con la crittografia?
Risposte:
L'intera richiesta è crittografata, incluso l'URL e persino il comando (GET
). L'unica cosa che una parte interveniente come un server proxy può raccogliere è l'indirizzo e la porta di destinazione.
Si noti, tuttavia, che il pacchetto Client Hello di una stretta di mano TLS può pubblicizzare il nome di dominio completo in testo normale tramite l' estensione SNI (grazie a @hafichuk), che viene utilizzato da tutti i browser mainstream moderni, sebbene alcuni solo su sistemi operativi più recenti.
EDIT: (Dal momento che questo mi ha appena ottenuto un badge "Buona risposta", immagino che dovrei rispondere all'intera domanda ...)
L'intera risposta è anche crittografata; i proxy non possono intercettarne alcuna parte.
Google offre ricerche e altri contenuti su https perché non tutto è pubblico e potresti anche voler nascondere parte del contenuto pubblico da un MITM . In ogni caso, è meglio lasciare che Google risponda da solo .
GET
comando) è crittografato. Questo è coperto in RFC 4366
L'URL stesso è crittografato, quindi i parametri nella stringa di query non viaggiano in chiaro attraverso il filo.
Tuttavia, tieni presente che gli URL, inclusi i dati GET, vengono spesso registrati dal server web, mentre raramente i dati POST lo sono. Quindi, se hai intenzione di fare qualcosa del genere /login/?username=john&password=doe
, allora non farlo; usa invece un POST.
HTTPS Stabilisce una definizione SSL sottostante prima che vengano trasferiti tutti i dati HTTP. Ciò garantisce che tutti i dati URL (ad eccezione del nome host, utilizzato per stabilire la connessione) siano trasportati esclusivamente all'interno di questa connessione crittografata e siano protetti dagli attacchi man-in-the-middle nello stesso modo in cui lo sono tutti i dati HTTPS.
Quanto sopra fa parte di una risposta MOLTO completa da Google Answers che si trova qui:
http://answers.google.com/answers/threadview/id/758002.html#answer
La parte dell'URL dopo il nome host viene inviata in modo sicuro.
Ad esempio, https://somewhere.com/index.php?NAME=FIELD
La /index.php?NAME=FIELD
parte è crittografata. Non lo somewhere.com
è.
Tutto è crittografato, ma è necessario ricordare che la query rimarrà nei registri del server e sarà accessibile a vari analizzatori di registri ecc. (Che di solito non è il caso della richiesta POST).
Sì, è sicuro. SSL crittografa tutto.
Estratto dalla richiesta POST:
POST /foo HTTP/1.1
... some other headers
Estratto dalla richiesta GET:
GET /foo?a=b HTTP/1.1
... some other headers
In entrambi i casi, tutto ciò che viene inviato sul socket è crittografato. Il fatto che il client veda i parametri nel suo browser durante una richiesta GET non significa che un uomo nel mezzo vedrebbe lo stesso.
Mi sono appena connesso tramite HTTPS a un sito Web e ho passato un sacco di parametri GET. Ho quindi usato WireShark per annusare la rete. Usando HTTP, l'URL viene inviato non crittografato, il che significa che posso facilmente vedere tutti i parametri GET nell'URL. Usando HTTPS, tutto è crittografato e non riesco nemmeno a vedere quale pacchetto è il comando GET, per non parlare del suo contenuto!
L'SSL ha luogo prima dell'analisi dell'intestazione, questo significa:
Client creates Request
Request gets encrypted
Encrypted request gets transmitted to the Server
Server decrypts the Request
Request gets parsed
Una richiesta è simile a questa (non ricordo l'esatta sintassi, ma dovrebbe essere abbastanza vicina):
GET /search?q=qwerty HTTP/1.1
Host: www.google.de
Questo è anche il motivo per cui avere diversi certificati SSL per più host sullo stesso IP è problematico, il nome host richiesto non è noto fino alla decodifica.
HTTP/1.1
arriva alla fine della prima riga.
La richiesta GET viene crittografata quando si utilizza HTTPS - in effetti questo è il motivo per cui i siti Web protetti devono avere un indirizzo IP univoco - non è possibile ottenere il nome host (o la directory virtuale) desiderato dalla richiesta fino a quando non viene decrittografato.