it-swarm-eu.dev

Framework certificato SSL 101: in che modo il browser verifica effettivamente la validità di un determinato certificato server?

(Mi dispiace, so che questa è una domanda noob completa e a rischio di pubblicare un argomento un po 'duplicato. Ho una conoscenza di base di chiave pubblica/privata, hash, firma digitale ... ho cercato online e impilato forum negli ultimi giorni ma non riesco a trovare una risposta soddisfacente.)

Esempio: Sto navigando su open wifi e navigo per la prima volta. Il server restituisce il suo certificato SSL. Il mio browser fa la sua cosa e verifica che il certificato sia firmato da una CA che si fida e tutto va bene. Faccio clic sul sito Web. MA!

Domanda: Qualcuno può davvero spiegarmi in modo semplice in che modo il mio browser verifica effettivamente che il certificato del server sia legittimo? Sì, okay, quindi sul certificato stesso dice che è stato rilasciato, diciamo "Verisign", ma qual è la vera magia crittografica che accade dietro la scena per confermare che non è un certificato falso? Ho sentito gente spiegare "I certificati SSL vengono verificati utilizzando la chiave pubblica della CA di firma" ma per me non ha senso. Pensavo che la chiave pubblica fosse crittografare i dati, non decrittografarli.

Così confuso ... apprezzalo se qualcuno potesse illuminarmi. Grazie in anticipo!

75
SecurityNoob

Hai ragione che SSL utilizza una coppia di chiavi asimmetrica. Viene generata una chiave pubblica e una privata, nota anche come infrastruttura a chiave pubblica (PKI). La chiave pubblica è ciò che viene distribuito al mondo e viene utilizzata per crittografare i dati. Tuttavia, solo la chiave privata può effettivamente decrittografare i dati. Ecco un esempio:

Supponiamo che entrambi andiamo su walmart.com e compriamo cose. Ognuno di noi ottiene una copia della chiave pubblica di Walmart con cui firmare la transazione. Una volta che la transazione è firmata dalla chiave pubblica di Walmart, solo la chiave privata di Walmart può decrittografare la transazione. Se uso la mia copia della chiave pubblica di Walmart, non decifrerà la transazione. Walmart deve mantenere la propria chiave privata molto privata e sicura, altrimenti chiunque lo ottenga può decifrare le transazioni su Walmart. Questo è il motivo per cui DigiNotar breach è stato un grosso problema

Ora che hai l'idea delle coppie di chiavi pubbliche e private, è importante sapere chi emette effettivamente il certificato e perché i certificati sono affidabili. Lo sto semplificando troppo, ma ci sono specifiche autorità di certificazione radice (CA) come Verisign che firmano certificati, ma firmano anche per le CA intermedie. Questo segue quella che viene chiamata Chain of Trust, che è una catena di sistemi che si fidano reciprocamente. Vedere l'immagine collegata di seguito per avere un'idea migliore (notare che la CA principale è in fondo).

Simple Chain of Trust

Le organizzazioni acquistano spesso certificati con caratteri jolly o vengono registrate come CA intermedie stesse autorizzate a firmare solo per il proprio dominio. Ciò impedisce a Google di firmare certificati per Microsoft.

A causa di questa catena di fiducia, un certificato può essere verificato fino alla CA principale. Per dimostrarlo, DigiCert (e molti altri) dispongono di strumenti per verificare questa fiducia. Lo strumento di DigiCert è collegato qui . Ho fatto una convalida su gmail.com e quando scorri verso il basso mostra questo:

Certificate of Trust for Gmail

Ciò dimostra che il certificato per gmail.com è emesso da Google Internet Authority G2, che a sua volta ha rilasciato un certificato da GeoTrust Global, che a sua volta ha rilasciato un certificato da Equifax.

Ora, quando vai su gmail.com, il tuo browser non si limita a ottenere un blob di hash e continua. No, ottiene tutta una serie di dettagli insieme al certificato:

Google Public Cert Details

Questi dettagli sono ciò che il tuo browser utilizza per aiutare a identificare la validità del certificato. Ad esempio, se la data di scadenza è trascorsa, il browser genererà un errore di avviso. Se tutti i dettagli di base del certificato vengono verificati, verrà verificato fino alla CA principale, che il certificato è valido.

Ora che hai un'idea migliore dei dettagli del certificato, questa immagine espansa simile alla prima sopra avrà più senso:

Certificate Chain of Trust Expanded

Questo è il motivo per cui il browser può verificare un certificato rispetto al successivo, fino alla CA principale, di cui il browser si fida intrinsecamente.

Spero che questo ti aiuti a capire un po 'meglio!

75
PTW-105

Per chiarire un punto della domanda non trattata nella risposta altrimenti eccellente di @ PTW-105 (e posta nel commento lì da @ JVE999):

Pensavo che la chiave pubblica fosse crittografare i dati, non decodificare i dati ...

Le chiavi funzionano in entrambi i modi: ciò che è crittografato con la chiave pubblica può essere decrittografato solo con il privato e viceversa . Decidiamo solo che uno è privato e uno è pubblico, non c'è differenza concettuale.

Quindi se io crittografo i dati per inviarti, uso la tua chiave pubblica per crittografarli e solo tu puoi decrittografarli con la tua chiave privata.

Tuttavia, se voglio firmare qualcosa, per dimostrare che proviene da me, quindi genera un hash del messaggio e crittografare tale hash con il mio chiave privata . Quindi chiunque può decodificarlo con la mia chiave pubblica e confrontarlo con l'hash del messaggio reale, ma sanno che solo io avrei potuto crittografarlo, dal momento che solo io ho la mia chiave privata. Quindi sanno che l'hash del messaggio non è cambiato da quando l'ho firmato, e quindi che è arrivato da me.

Secondo i commenti, quanto sopra non è del tutto vero. Vedi link dal commento di @ dave_thompson_085. Tuttavia, questo non è un tutorial "come firmare correttamente", chiarendo solo i ruoli delle chiavi pubbliche e private nella firma dei versi di crittografia. Il punto fondamentale al riguardo è questo:

  • Per crittografare i dati la parte esterna utilizza una chiave pubblica e solo il proprietario della chiave privata può decrittografarla.
  • Per firmare, il detentore della chiave privata utilizza una funzione hash e la sua chiave privata (più un'imbottitura appropriata, ecc.). La parte esterna può quindi verificare la firma utilizzando la chiave pubblica. Ciò garantisce che il messaggio provenga dal titolare della chiave privata (supponendo che nessun altro abbia accesso alla chiave privata).

La firma a volte (a seconda dell'implementazione) può essere eseguita con la stessa coppia di chiavi della crittografia, utilizzata al contrario, oppure può utilizzare una coppia di chiavi distinta (vedere n altro collegamento , anche da @ dave_thompson_085 commento)

2
Adam

Se un sito Web ha un certificato valido, significa che un'autorità di certificazione ha adottato delle misure per verificare che l'indirizzo Web appartenga effettivamente a tale organizzazione. Quando si digita un URL o si segue un collegamento a un sito Web sicuro, il browser controllerà il certificato per le seguenti caratteristiche: l'indirizzo del sito Web corrisponde all'indirizzo sul certificato, il certificato è firmato da un'autorità di certificazione (CA) che il browser riconosce come autorità "fidata"

Entrambi i protocolli TLS e SSL utilizzano quello che è noto come un sistema PKI (Public Key Infrastructure) "asimmetrico". Un sistema asimmetrico utilizza due "chiavi" per crittografare le comunicazioni, una chiave "pubblica" e una chiave "privata". Tutto ciò che è crittografato con la chiave pubblica può essere decrittografato solo dalla chiave privata e viceversa. Quando si accede a un sito, un sito Web presenta la propria chiave pubblica che il browser convalida e utilizza per crittografare i dati inviati (tra il browser e il loro server) e solo il server/sito ha la chiave privata in grado di decrittografare i dati.

Alcune informazioni sulle chiavi: la crittografia asimmetrica (o crittografia a chiave pubblica) utilizza una chiave separata per la crittografia e la decrittografia. Chiunque può utilizzare la chiave di crittografia (chiave pubblica) per crittografare un messaggio. Tuttavia, le chiavi di decrittazione (chiavi private) sono segrete. In questo modo solo il destinatario previsto può decrittografare il messaggio. L'algoritmo di crittografia asimmetrica più comune è RSA; tuttavia, discuteremo degli algoritmi più avanti in questo articolo.

pieno credito a questi siti:

https://www.us-cert.gov/ncas/tips/ST05-01

https://www.digicert.com/ssl-cryptography.htm

0
grepit