Come funzionano i certificati SSL / TLS?

-1

Sto cercando di capire come funzionano i certificati SSL / TLS, ma mi manca qualcosa. Ho ottenuto la mia attuale comprensione da questo sito: link .

Ho anche visto questo post: Come funzionano i processi per certificati digitali, firme e ssl?

Dopo aver esaminato entrambi i link per l'ennesima volta, il vero mistero per me circonda il modo in cui il client verifica il certificato del server.

Ecco la mia comprensione dei passaggi:

1. Certificate Authority (CA) gives an encrypted root certificate to a server.
2.a. Server gives client a locally encrypted certificate and a public key.
2.b. Server gives client a root certificate which is decrypted with the public key already on the client's computer.
3. Client uses public keys to decrypt certificates.
4. Certificates contains information that satisfies client of servers authenticity.

Probabilmente mi mancano alcune informazioni critiche in ogni fase e probabilmente mancano anche dei passaggi qui. Supponiamo che io sia il cliente. Ecco le mie domande:

Q0. Come faccio a sapere (il cliente) che dovrei usare la chiave pubblica fornita per decifrare il certificato? In altre parole, se un impostore può ottenere un certificato decrittografato (quale - chi non può visitare chi riceve il server?); può l'impostore criptare il certificato con la sua chiave privata e darmi una nuova chiave pubblica?

In questo caso, penso che dovrei essere in grado di decifrare il certificato. Il semplice controllo del testo potrebbe semplicemente non funzionare. Ma l'impostore può modificare il testo in chiaro per rendere il mio browser felice?

D1. Cosa succede se un impostore mi ha semplicemente inoltrato il certificato crittografato? Lo decifrerei con una vera chiave pubblica. Probabilmente c'è qualcosa nel mio passaggio 4 che mi manca.

In questo caso, ancora una volta il certificato clear-text deve avere alcune informazioni che rivelino che è cattivo. Cos'è questa informazione?

Q2. Sono presenti informazioni di testo in chiaro nel certificato decrittografato che convalida che I (il client) sono connesso al server a cui desidero connettermi? Sono sicuro che il certificato dovrebbe dire qualcosa come "da stackoverflow.com". Dato che questo è fatto da un computer, presumo che ci siano molti confronti fatti?

Q2.a Come faccio a sapere (io il cliente) che ho il certificato corretto? Ad esempio, se stackoverflow.com mi ha inviato un certificato per Amazon.com, in che modo il browser rileva un problema se (per motivi dannosi) il certificato viene decifrato?

    
posta Java Addict 29.07.2014 - 21:54
fonte

1 risposta

3

Primo passo: dimentica tutto sulla crittografia . Non c'è crittografia nei certificati. Esistono firme digitali . Algoritmi di firma digitale, quando sono stati inventati e pubblicati per la prima volta alla fine degli anni '70, dove sfortunatamente descritto come "crittografia con la chiave privata", che è un'analogia imperfetta, che in realtà non funziona e comporta una strong dose di confusione. Dì semplicemente di no. Parla di firma .

Una firma è un dato che è:

  • calcolato su una determinata sequenza di byte;
  • richiede una chiave privata ;
  • può essere verificato usando la corrispondente chiave pubblica .

I certificati sono firmati da Autorità di certificazione . Con questa firma, la CA afferma: "Io, la CA, garantisco che i contenuti di tale certificato siano corretti". Cosa contiene un certificato? Principalmente una identità e una chiave pubblica . Ciò che la CA afferma è che la chiave pubblica (nel certificato) è effettivamente di proprietà dell'entità la cui identità è presente nel certificato.

L'idea è che, quando tu (il client) ti connetti a un server SSL, il server ti rispedisce il certificato. È quindi possibile verificare la firma su quel certificato, ottenendo così una certa fiducia nel legame di identità / chiave pubblica che il certificato rappresenta. Controlla anche che il nome nel certificato sia quello che ti aspetti (il nome del server con cui stai cercando di parlare). Una volta eseguite queste due verifiche, è ragionevole assicurarsi che la chiave pubblica nel certificato sia effettivamente la chiave pubblica del server originale. Il resto di SSL utilizza quella chiave pubblica per tutta la crittografia SSL.

Questo processo funziona solo se conosci già la chiave pubblica CA. Tu potresti imparare con un altro certificato (contenente la chiave pubblica della CA e firmato da qualche über-CA); questo è comune (questo è il concetto di CA intermedio ) ma sposta solo il problema. Devi sapere, a priori , qualche chiave pubblica di CA ad un certo punto. Bill Gates, nella sua infinita saggezza, ha ritenuto opportuno includere un centinaio di chiavi pubbliche "root CA" in Windows / Internet Explorer, in modo che la fiducia potesse iniziare da qualche parte.

Questo è il succo: un certificato rappresenta un legame tra identità e una chiave pubblica, ed è firmato da qualche CA; si verifica l'associazione verificando la firma, che richiede l'uso della chiave pubblica CA; o conosci la chiave pubblica CA da un atto di Bill Gates, o tramite un altro certificato, e così via. Tutto questo viene fatto dai client SSL.

Il resto è solo tecnico (e complesso). Puoi iniziare con la pagina di Wikipedia , che è altrettanto buona (e meno) un punto di partenza come qualsiasi altra cosa su quell'oggetto.

    
risposta data 29.07.2014 - 22:35
fonte

Leggi altre domande sui tag