2012-01-13 10 views
24

Voglio solo verificare, quando si effettua una connessione SSL (HTTP POST) per dire:Con HTTPS, l'URL e le intestazioni delle richieste sono protetti come il corpo della richiesta?

https://www.example.com/some/path?customer_key=123123123 

Se non si vuole che nessuno sappia su customer_key, questo approccio non funziona, anche se sto facendo un https connessione corretta?

Tutti i dati che desidero protetti devono trovarsi nel corpo della richiesta giusto?

+1

Giusto per chiarire (vedendo alcune altre risposte). Il tuo problema riguarda le intercettazioni nel mezzo, giusto? Sei preoccupato per il modo in cui memorizzi * i tuoi log * (presumibilmente stai utilizzando questo server)? – Bruno

+3

possibile duplicato di [Sono crittografati gli URL https?] (Http://stackoverflow.com/questions/499591/are-https-urls-encrypted) – Gumbo

risposta

33

Citando il HTTPS RFC:

Quando l'handshake TLS è terminato. Il client può quindi avviare la prima richiesta HTTP . Tutti i dati HTTP DEVONO essere inviati come "applicazione dati TLS".

In sostanza, il canale SSL/TLS protetto viene stabilito per primo. Solo allora viene utilizzato il protocollo HTTP. Questo proteggerà tutto il traffico HTTP con SSL, comprese le intestazioni HTTP (che contengono l'URL e i cookie).

Ciò che potrebbe essere visibile nell'handshake è il nome host stesso, poiché è contenuto nel certificato del server che sarà visibile in chiaro nell'handshake (ed è spesso facile indovinare il nome host guardando all'indirizzo IP di destinazione Comunque).

Quando si utilizza l'indicazione del nome del server, il nome dell'host richiesto deve essere visibile anche nell'estensione server_name nel messaggio ClientHello. In caso contrario, potrebbe esserci un po 'di ambiguità (per chi intercetta) per indovinare il nome host dal certificato se il certificato è valido per più nomi host (ad esempio più oggetti Alt. Nomi o caratteri jolly). In questo caso, l'intercettazione della richiesta DNS da parte del client potrebbe dare un indizio all'attaccante.

Leggere le risposte di altre persone e commenti, alcuni citano problemi su Referer (perso uno r nella specifica) e registri.

Uno dei restanti potenziali punti deboli è come si dà quel collegamento per l'utente. Se è incorporato in una pagina Web pubblicata su un semplice HTTP, chiunque sia in grado di leggere quella pagina sarà in grado di vederlo. Dovresti pubblicare anche questa pagina su HTTPS. Se invece invii quel collegamento via e-mail, direi che tutte le scommesse sono disattivate, poiché i server di posta raramente crittografano le connessioni tra loro e gli utenti spesso accedono spesso al loro account e-mail senza alcuna crittografia.

EDIT:

Inoltre, se si sta utilizzando l'autenticazione client certificato, il certificato client saranno visibili se viene negoziato durante l'handshake iniziale. Ciò potrebbe far trapelare il nome dell'utente che accede al sito Web (spesso i DN oggetto contengono il nome utente). Il certificato client non sarà visibile se viene inviato durante un handshake rinegoziato.

3

Solo www.example.com saranno visibili a snoopers. La sezione del percorso della richiesta è protetta da SSL/TLS.

Ovviamente, è necessario aver inviato anche il collegamento ipertestuale originale tramite HTTPS.

0

che dipende ..

Se si utilizza un pacchetto sniffer non è possibile vedere i dati inviati in rete. Il problema principale di questo approccio è che l'url della richiesta viene spesso salvato nel log del server in testo normale, la cronologia del browser mantiene l'URL, gli URL sono passati nelle intestazioni Referrer e forse persistono dai servizi di terze parti (google analytics).

+0

beh questo è server-server, non browser client-server. – codecompleting

+1

Il 'Referer' non deve essere trasmesso con HTTPS: http://stackoverflow.com/a/8848843/372643 – Bruno

1

I dati delle richieste verranno inviati dopo aver stabilito la connessione protetta, quindi non preoccuparti con l'URL precedente, ma ricorda che i tuoi dati non sono crittografati, solo il canale tra server e client è crittografato, se uno può decifrare questo canale, quindi può vedere chiaramente il tuo dati.

SSL è un canale crittografato con wrapper in cima ai dati. Se i dati sono chiari, chiunque possa violare l'SSL può vedere chiaramente i tuoi dati.

+0

Qual è la differenza tra la crittografia dei canali e la crittografia dei dati. In ssl handshake, il server e il client http concordano su una chiave segreta e i dati inviati vengono crittografati usando quella chiave segreta, giusto? – Ashwin

+0

@Ashwin, supponiamo che tu stia inviando ABC su filo, ssl avvolge ABC usando la chiave segreta, quindi sarà qualcosa come [ABC], [] è chiave wrapper (o), ma il contenuto all'interno è ancora ABC. Se qualcuno lo sa [] (la tua chiave), può facilmente ottenere i tuoi dati. – kosa

+0

Come qualcuno saprà la mia chiave. È un segmento condiviso solo tra il client e il certificato? Ci sono modi per conoscere la chiave segreta da una terza persona? – Ashwin

Problemi correlati