Come fa un web server a sapere quale coppia di chiavi utilizzare per la decrittografia SSL?


18

Comprendo che quando Apache riceve una richiesta su una delle porte TCP su cui è in ascolto (ad es. 80, 443), deciderà quale host viene richiesto guardando l'intestazione HTTP Host. Il server saprà quindi a quale host virtuale deve reindirizzare la richiesta.

Ma come funziona per HTTP su SSL / TLS? Poiché l'intera richiesta HTTP viene crittografata (almeno è quello che credo di aver letto da qualche parte), le informazioni di intestazione possono essere lette solo dopo che il server ha decifrato i dati. Ma per decrittografare, deve sapere quale coppia di chiavi utilizzare poiché è possibile avere più certificati SSL installati su un server Web.

Quindi, come fa il server a sapere quale chiave è necessaria per la decrittazione?


La mia ipotesi :

Potrei immaginare che l'handshake TLS fornisca le informazioni necessarie.


Per quanto riguarda il flag "possibile duplicato" :

Anche se concordo sul fatto che le risposte alla domanda collegata e alla mia sono simili, devo dire che la domanda è diversa. È fuori dubbio se o come sia possibile l'hosting di più siti con certificati SSL indipendenti. Invece la mia domanda affronta l'aspetto tecnico sottostante.




Concordo sul fatto che le risposte sono abbastanza simili, tuttavia ritengo che le domande siano piuttosto diverse.
Paolo,

Risposte:


29

Inizialmente, il web server non lo sapeva. Questo era il motivo per cui era necessario un indirizzo IP separato per ogni vhost SSL che si voleva ospitare sul server. In questo modo, il server sapeva che quando è arrivata una connessione su IP X, doveva usare la configurazione (compresi i certificati) per il vhost associato.

Ciò è cambiato con Indicazione nome server , un'estensione TLS che in effetti consente a un client di indicare il nome host richiesto nel processo di sincronizzazione. Questa estensione è utilizzata in tutti i sistemi operativi moderni, ma i vecchi browser o server non la supportano, quindi se ti aspetti che i client utilizzino ancora IE 6 su WinXP, non avrai fortuna.


2
Se qualcuno usa ancora XP, non meritano comunque di visitare il mio sito;)
paolo,

2
grande attenzione deve essere posta nel limitare i clienti in questo modo (browser, non persone). Molte, molte aziende non aggiornano Windows molto bene, e lo stesso vale per alcuni venditori di telefoni Android, di solito non aggiornano affatto il loro sistema operativo (o almeno non molto). Windows XP è all'8% e la quota di mercato Android pre 4.4 sembra enorme.
Coteyr,

Nel caso in cui al server manchi il supporto SNI, è possibile utilizzare un proxy con supporto SNI davanti a un server senza supporto SNI.
Kasperd,

1
@coteyr La stragrande maggioranza dei restanti utenti di XP è in Cina. C'è pochissimo utilizzo altrove, per fortuna, almeno su Internet.
Michael Hampton

7

Sembra che tu abbia alcune idee sbagliate su TLS / SSL. La richiesta HTTP non è crittografata dalla chiave pubblica del server. È crittografato da un codice simmetrico usando una chiave negoziata nella stretta di mano precedente.

Breve descrizione dell'handshake TLS: il server e il client negoziano alcuni cifrari, chiavi simmetriche e altri dettagli. Al fine di prevenire MITM, il server di solito invia il proprio certificato (catena) al client e autentica l'handshake utilizzando la chiave nel certificato. (Esistono anche altre varianti, ad esempio l'autenticazione client o TLS-PSK, ma non sono molto utilizzate con HTTP.) Il client può convalidare il certificato (nel solito modo) o ignorarlo.

Sebbene SNI sia importante quando si utilizzano più certificati TLS su un solo IP, non è essenziale che il server sia in grado di decrittografare la richiesta. Senza SNI, il server non sa quale catena di certificati debba essere inviata, quindi di solito ne sceglie uno (ad es. Il primo vhost), che potrebbe ovviamente essere sbagliato. Se il server sceglie una catena di certificati errata, il client dovrebbe rifiutarla (quindi non continua con l'invio della richiesta HTTP). Tuttavia, se il client ignora il certificato (o se il certificato non valido è contrassegnato come attendibile per questo sito), può continuare correttamente. Poiché la chiave simmetrica utilizzata per la crittografia non dipende dal certificato (TLS è progettato per funzionare anche senza certificati), il server può decrittografarlo.

Solo una piccola nota del perché sto scrivendo su TLS, mentre mi hai chiesto di SSL: TLS è la nuova versione di SSL. Tutte le versioni di SSL sono considerate non sicure per l'uso generale, quindi ora utilizziamo principalmente TLS (1.0, 1.1, 1.2).


"La richiesta HTTP non è crittografata dalla chiave pubblica del server. È crittografata da una cifra simmetrica che utilizza una chiave negoziata nella stretta di mano precedente." Non lo sapevo, grazie per l'heads-up! So, tuttavia, che TLS ha sostituito SSL, ma siamo rimasti bloccati con il termine convenzionale "certificato SSL", da cui la mia menzione.
Paolo,

So che termini come "certificato SSL" sono abbastanza spesso per TLS. Sto cercando di evitarli, ma non ero sicuro che tu (o altri) conoscessi il termine TLS.
v6ak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.