Domanda

Qual è la serie di passaggi necessari per verificare in modo sicuro un certificato SSL? La mia (molto limitata) comprensione è che quando si visita un sito https, il server invia un certificato al client (il browser) e il browser ottiene le informazioni sull'emittente del certificato da quel certificato, quindi lo utilizza per contattare l'emittente e in qualche modo confronta certificati di validità.

  • Come viene fatto esattamente?
  • Che dire del processo lo rende immune agli attacchi man-in-the-middle?
  • Che cosa impedisce a una persona a caso di impostare il proprio servizio di verifica da utilizzare negli attacchi man-in-the-middle, quindi tutto "sembra" sicuro?
È stato utile?

Soluzione

Ecco una spiegazione molto semplificata:

  1. Il browser Web scarica il certificato del server Web, che contiene la chiave pubblica del server Web. Questo certificato è firmato con la chiave privata di un'autorità di certificazione attendibile.

  2. Il tuo browser web viene installato con le chiavi pubbliche di tutte le principali autorità di certificazione. Utilizza questa chiave pubblica per verificare che il certificato del server Web sia stato effettivamente firmato dall'autorità di certificazione attendibile.

  3. Il certificato contiene il nome di dominio e / o l'indirizzo IP del web server. Il tuo browser web conferma con l'autorità di certificazione che l'indirizzo elencato nel certificato è quello a cui ha una connessione aperta.

  4. Il tuo browser web genera una chiave simmetrica condivisa che verrà utilizzata per crittografare il traffico HTTP su questa connessione; questo è molto più efficiente dell'utilizzo della crittografia a chiave pubblica / privata per tutto. Il browser crittografa la chiave simmetrica con la chiave pubblica del server Web, quindi la restituisce, garantendo in tal modo che solo il server Web può decodificarla, poiché solo il server Web ha la sua chiave privata.

Nota che l'autorità di certificazione (CA) è essenziale per prevenire attacchi man-in-the-middle. Tuttavia, anche un certificato non firmato impedirà a qualcuno di ascoltare passivamente il tuo traffico crittografato, poiché non ha modo di accedere alla tua chiave simmetrica condivisa.

Altri suggerimenti

Vale la pena notare che oltre all'acquisto di un certificato (come menzionato sopra), puoi anche crearne uno tuo gratuitamente; questo viene definito "certificato autofirmato". La differenza tra un certificato autofirmato e quello acquistato è semplice: quello acquistato è stato firmato da un'autorità di certificazione di cui il browser conosce già. In altre parole, il tuo browser può facilmente convalidare l'autenticità di un certificato acquistato.

Sfortunatamente questo ha portato a un malinteso comune sul fatto che i certificati autofirmati siano intrinsecamente meno sicuri di quelli venduti da CA commerciali come GoDaddy e Verisign e che si debbano convivere con avvisi / eccezioni del browser se li si utilizza; non è corretto .

Se distribuisci in modo sicuro un certificato autofirmato (o CA cert, come suggerito da Bobince) e lo installi nei browser che utilizzeranno il tuo sito , è sicuro tanto quanto quello acquistato e lo è non vulnerabile agli attacchi man-in-the-middle e alla falsificazione sicura. Ovviamente questo significa che è possibile solo se solo poche persone hanno bisogno di un accesso sicuro al tuo sito (ad es. App interne, blog personali, ecc.).

Nell'interesse di aumentare la consapevolezza e incoraggiare i colleghi blogger di piccole dimensioni come me a proteggersi, ho scritto un tutorial di base che spiega in modo più dettagliato i concetti alla base dei certificati e come creare e utilizzare in sicurezza un sé certificato firmato (completo di esempi di codice e schermate).

L'hai detto

  

il browser ottiene da questo le informazioni sull'emittente del certificato   certificato, quindi lo utilizza per contattare l'emittente e in qualche modo   confronta i certificati per validità.

Il cliente non deve verificare con l'emittente perché due cose:

  1. tutti i browser dispongono di un elenco preinstallato di tutte le principali chiavi pubbliche delle CA
  2. il certificato è firmato e quella stessa firma è la prova sufficiente che il certificato è valido perché il client può assicurarsi, da solo, e senza contattare il server dell'emittente, che quel certificato sia autentico. Questa è la bellezza della crittografia asimmetrica.

Si noti che 2. non si può fare senza 1.

Questo è meglio spiegato in questo grande diagramma che ho fatto qualche tempo fa

(vai a " cos'è una firma? " in fondo)

blob

Il client ha un archivio pre-seed delle chiavi pubbliche delle autorità di certificazione SSL. Deve esserci una catena di fiducia dal certificato per il server fino alle autorità intermedie fino a una delle cosiddette "root" certificati per l'attendibilità del server.

Puoi esaminare e / o modificare l'elenco delle autorità fidate. Spesso lo fai per aggiungere un certificato per un'autorità locale di cui ti fidi, ad esempio la società per cui lavori o la scuola che frequenti o cosa no.

L'elenco pre-seed può variare in base al client utilizzato. I grandi fornitori di certificati SSL assicurano che i loro certificati root siano presenti in tutti i principali browser ($$$).

Gli attacchi di Monkey-in-the-middle sono "impossibili" a meno che l'attaccante non disponga della chiave privata di un certificato radice attendibile. Poiché i certificati corrispondenti sono ampiamente utilizzati, l'esposizione di una tale chiave privata avrebbe serie implicazioni per la sicurezza dell'eCommerce in generale. Per questo motivo, quelle chiavi private sono molto, molto attentamente custodite.

se hai una mentalità più tecnica, questo sito è probabilmente quello che vuoi: http: //www.zytrax.com/tech/survival/ssl.html

attenzione: la tana del coniglio diventa profonda :).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top