2009-02-26 10 views
18

Dire quando si utilizza https, il browser effettua una richiesta al server e il server restituisce il certificato, inclusa la chiave pubblica e la firma della CA.Domanda SSL: come fa una CA ROOT a verificare una firma

A questo punto, il browser chiederà alla CA di verificare se la determinata chiave pubblica appartiene realmente al server o no?

Come viene eseguita la verifica dal certificato di root sul browser?

Per fare un esempio: Il serverX ha ottenuto un certificato da CA "rootCA". Il browser ha una copia di rootCA memorizzata localmente. Quando il browser ping serverX e risponde con la sua chiave pubblica + firma. Ora la CA radice utilizzerà la sua chiave privata per decrittografare la firma e assicurarsi che sia davvero serverX?

è così che funziona?

risposta

48

Il server ha un certificato, costituito da una chiave privata e pubblica. Il server non fornisce mai la chiave privata, ovviamente, ma tutti possono ricevere la chiave pubblica. La chiave pubblica è incorporata in un formato contenitore certificato. Questo formato contiene l'indirizzo IP o il nome di dominio del server, il proprietario di questo indirizzo IP/nome di dominio, un indirizzo e-mail del proprietario, ecc.

Il tutto è firmato da un'autorità fidata. Anche l'autorità fidata, nota anche come autorità di certificazione (CA), ha una coppia di chiavi privata/pubblica. Se dai loro il tuo certificato, verificano che le informazioni nel contenitore siano corrette e firmano con la loro chiave privata, solo a loro hanno accesso.

La chiave pubblica della CA viene installata sul sistema utente per impostazione predefinita, le CA più note sono già incluse nell'installazione predefinita del sistema operativo o del browser preferito.

Quando un utente si connette al server, il server utilizza la chiave privata per firmare alcuni dati, i pacchetti che hanno firmato i dati insieme alla propria chiave pubblica e invia tutto al client.

Cosa può fare ora il cliente? Prima di tutto, può utilizzare la chiave pubblica appena inviata per verificare i dati firmati. Poiché solo il proprietario della chiave privata è in grado di firmare correttamente i dati in modo tale che la chiave pubblica possa verificare la firma, sa che chiunque abbia firmato questo dato, questa persona è proprietaria della chiave privata della chiave pubblica ricevuta . Fin qui tutto bene. Ma cosa impedisce a un hacker di intercettare il pacchetto, sostituire i dati firmati con i dati firmati utilizzando un certificato diverso e anche sostituire la chiave pubblica con la sua chiave pubblica? Niente.

Ecco perché dopo che i dati firmati sono stati verificati (o prima che siano verificati) il client verifica che la chiave pubblica ricevuta abbia una firma CA valida. Utilizzando la chiave CA pubblica già installata, verifica che la chiave pubblica ricevuta sia stata firmata da una CA conosciuta. Altrimenti viene rifiutato (come potrebbe averlo sostituito un hacker sulla strada).

Ultimo ma non meno importante, controlla le informazioni all'interno del contenitore della chiave pubblica. L'indirizzo IP o il nome di dominio corrisponde realmente all'indirizzo IP o al nome di dominio del server con cui sta parlando il client? In caso contrario, qualcosa è di pesce!

Le persone possono chiedere: cosa impedisce a un hacker di creare la propria coppia di chiavi e di inserire semplicemente il nome di dominio o l'indirizzo IP nel certificato? Facile: se lo fa, nessuna CA firmerà la sua chiave. Per ottenere una firma della CA, devi dimostrare di essere realmente il proprietario di questo indirizzo IP o nome di dominio. L'hacker non lo è, non può provarlo, non otterrà una firma. Quindi questo non funzionerà.

Ok, che ne dici se l'hacker registra il proprio dominio, crea un certificato per questo e lo ha firmato da una CA? Funziona, lo farà firmare dalla CA, è il suo dominio, nessun problema. Tuttavia non può usare questo quando si hacking la connessione. Se usa questo certificato, il browser vedrà immediatamente che la chiave pubblica firmata è per domain example.net, ma attualmente sta parlando con example.com, non con lo stesso dominio, quindi qualcosa è di nuovo fasullo.

+2

Buona risposta! Ma ho un'altra domanda correlata ... Preventivo: "le CA più conosciute sono già incluse nell'installazione predefinita del tuo SO o browser preferito." Mi chiedo in che modo il browser espande la CA nota predefinita? Verificherà automaticamente un servizio web? o lo farà solo per la prossima versione della versione del browser? – forestclown

+2

I certificati CA vengono spediti insieme al browser o al sistema operativo. Firefox, Chrome, Opera hanno copie del certificato CA proprie incluse, Internet Explorer e Safari utilizzano certificati CA installati in Windows o OS X. Nulla impedisce a un browser di utilizzare sia le proprie copie che i certificati del sistema operativo (alcuni dei quali citati potrebbero persino fare quella). Ottieni nuovi certificati CA solo aggiornando il browser, aggiornando il sistema operativo o installandoli manualmente (scaricandoli e aggiungendoli al browser o al sistema operativo, entrambi sono possibili). – Mecki

+3

L'unica cosa che i browser controllano online (se possono) è se un certificato CA è ancora valido o meno. Ogni servizio CA esegue un Certificate Revocation Server, in cui un browser può chiedere se un determinato certificato è ancora valido o è stato revocato; ciò avviene tramite il protocollo OCSP: http://tinyurl.com/pcjk2 I certificati contengono l'indirizzo di un server OCSP da richiedere. – Mecki

0

Il browser non chiede alla CA di verificare, ma ha una copia dei certificati di root memorizzati localmente e utilizzerà la procedura di crittografia standard per verificare che il certificato sia realmente valido.

Questo è il motivo per cui quando firmi un certificato il tuo certificato non è valido, anche se tecnicamente c'è una CA da chiedere, potresti ovviamente copiare la CA autofirmata sul tuo computer e da lì in poi si fiderebbe della tua auto certificazioni.

CACert.org ha lo stesso problema, ha certificati validi ma poiché i browser non hanno i certificati di root nel loro elenco, i loro certificati generano avvisi fino a quando gli utenti scaricano le CA radice e le aggiungono al browser.

+0

non è chiaro per me. Supponiamo che serverX abbia ottenuto un certificato da CA rootCA. Il browser ha il certificato rootCA localmente memorizzato. Quindi quando il browser ping serverX risponde con la sua chiave pubblica + firma. La CA radice utilizzerà la sua chiave privata per decodificare la firma e assicurarsi che sia davvero serverX? – Sesh

+0

No, cosa controlla la firma, posso firmare qualcosa con la mia chiave privata che convalida contro la mia chiave pubblica. Pertanto, la CA principale memorizzata localmente è in realtà la parte pubblica della CA. Quindi, se il server remoto invia un certificato avrà una certa firma, tale firma può quindi essere calcolata matematicamente contro la parte pubblica della CA –

+0

per verificare che la parte privata della CA abbia effettivamente firmato il certificato in sé e per sé. –

2

I certificati si basano sull'utilizzo di una crittografia asimmetrica come RSA. Hai due chiavi, chiamate convenzionalmente le chiavi private e pubbliche. Qualcosa che tu abbia cripta con la chiave privata può essere decifrato solo usando la chiave pubblica. (E, in realtà, viceversa.)

Si può pensare che il certificato sia come un passaporto o una patente di guida: è una credenziale che dice "questo è chi sono, puoi fidarti perché mi è stato dato da qualcuno (come Verisign) di cui ti fidi. " Questo viene fatto con una "firma", che può essere calcolata usando la chiave pubblica dell'autorità di certificazione. Se i dati rappresentano l'origine originaria della CA, è possibile verificare il certificato.

Il certificato contiene informazioni identificative sul proprietario del certificato. Quando lo ricevi, usi la combinazione della chiave che conosci dalla tua autorità fidata per confermare che il certificato che hai ricevuto è valido e che puoi quindi dedurre che ti fidi della persona che ha emesso il certificato.

+0

La firma di un server dovrebbe essere abbastanza semplice da ottenere: basta inviare una richiesta https. Cosa succede se un serverY ottiene la firma di serverX in questo modo - non può impersonare serverX? – Sesh

+0

No, quando il browser si collega utilizza un avvio univoco (diffie hellman key exchange), a meno che ServerY non abbia la chiave privata per il certificato che viene utilizzata per calcolare la chiave pubblica in base a ciò che il browser ti invia, non è in grado di impersonare serverX . –

+0

Sesh, ciò che * può * fare in determinate condizioni è quello che viene chiamato un attacco "interposer" o "man in the middle". Ciò gli consente di giocare client al server, server al client e intercettare tutto. Ci sono protezioni contro questo. Google "man in the middle" e SSL per i dettagli. –

6

Il certificato del server è firmato con la chiave privata della CA. Il browser utilizza la chiave pubblica della CA per verificare la firma. Non c'è comunicazione diretta tra browser e CA.

Il punto importante è che il browser viene fornito con la chiave CA pubblica. In Firefox vedi Strumenti-> Opzioni-> Avanzate-> Crittografia-> Visualizza certificati-> Autorità. Quindi il browser conosce in anticipo tutte le CA di cui può fidarsi.

Se non lo capisci, consulta le nozioni di base sulla crittografia asimmetrica e le firme digitali.