Qual è la differenza tra un certificato e una chiave rispetto a SSL?


127

Ogni volta che cerco di capire qualcosa su SSL, faccio sempre fatica a tenere traccia di ciò che "chiave" e "certificato" si riferiscono. Temo che molte persone li usino in modo errato o intercambiabile. C'è una differenza standard tra una chiave e un certificato?


I certificati usati per SSL si basano pesantemente su PKI en.wikipedia.org/wiki/Public-key_cryptography
Zoredache,

Risposte:


115

Un certificato contiene una chiave pubblica.

Il certificato, oltre a contenere la chiave pubblica, contiene informazioni aggiuntive come l'emittente, il motivo per cui il certificato dovrebbe essere utilizzato e altri tipi di metadati.

In genere, un certificato viene a sua volta firmato da un'autorità di certificazione (CA) utilizzando la chiave privata della CA. Ciò verifica l'autenticità del certificato.


4
@Zoredache Se un certificato in genere ha solo una chiave pubblica, esiste un buon nome per chiamare i file .p12 o .pfx che contengono insieme certificati e chiavi private?
Dott.

Un pkcs12 è un formato di archivio. Può contenere una chiave o forse no. Di solito cerco di essere sempre specifico quando mi riferisco a ciò che contiene un determinato file, o semplicemente dico il file pkcs12.
Zoredache,

2
Dove sono sepolte queste informazioni aggiuntive? Stavo guardando alcuni certificati ed è tutto incomprensibile per me
CodyBugstein il

3
La cosa incomprensibile che stai guardando è la codifica Base64. È stato fatto in questo modo probabilmente per un motivo simile in cui gli allegati di posta elettronica vengono convertiti in quello - sostanzialmente per garantire che possano essere trasportati attraverso protocolli e meccanismi progettati per ASCII solo senza modifiche casuali e senza preoccuparsi di cose come newline, parentesi, ecc. Il opensslcomando può decodificare e analizzali oppure puoi usare un'utilità online come questa: lapo.it/asn1js
LawrenceC

Il certificato è firmato da una CA o dal server con cui viene comunicato?
Olshansk,

58

Queste due immagini insieme mi hanno spiegato tutto:

Fonte: linuxvoice

inserisci qui la descrizione dell'immagine

Fonte: infosecinstitute

inserisci qui la descrizione dell'immagine


1
Xkcd

Bello. 1 chiarimento: la prima immagine è l'autenticazione TLS standard (1 via); la seconda, reciproca (bidirezionale) auth. E un ulteriore call-out nel primo aiuterebbe ulteriormente a spiegare come viene effettivamente stabilita la fiducia (tutto in quella 1 foto dall'aspetto più amichevole): dopo che il client ottiene il certificato di chiave pubblica del server, il client verifica che la CA che ha firmato il il certificato del server è contenuto nell'elenco privato di CA attendibili del client (stabilendo che ora si fida anche di tale CA). Quindi, è sicuro inviare al server la chiave di sessione, con la quale ciascuno può ora crittografare e decrittografare le comunicazioni successive.
user1172173

Il primo collegamento, a linuxvoice.com/… , fornisce un errore del certificato. Ironico.
Tobb,

37

Diciamo che la società A ha una coppia di chiavi e deve pubblicare la sua chiave pubblica per uso pubblico (aka ssl sul suo sito web).

  • La società A deve presentare una richiesta di certificato (CR) a un'autorità di certificazione (CA) per ottenere un certificato per la sua coppia di chiavi.
  • La chiave pubblica, ma non la chiave privata, della coppia di chiavi dell'azienda A è inclusa come parte della richiesta di certificato.
  • La CA utilizza quindi le informazioni sull'identità dell'azienda A per determinare se la richiesta soddisfa i criteri della CA per l'emissione di un certificato.
    Se la CA approva la richiesta, rilascia un certificato alla società A. In breve CA firma la chiave pubblica della società A con la sua chiave privata (CA), che ne verifica l'autenticità.

Quindi la chiave pubblica della società A firmata con una chiave privata della CA valida è denominata certificato della società A.


La società A in qualche punto associa la sua chiave privata (della società A) al suo certificato (della società A)?
Tola Odejayi,

No. una chiave privata rimane riservata per A.
Mohsen Heydari,

Quindi, dove viene utilizzata la chiave privata dell'azienda A?
sivann,

2
Dopo le formalità di cui sopra. La società A avrà un certificato SSL valido sul suo sito web. Qualsiasi visitatore (browser) che comunica il sito Web utilizzerà la chiave pubblica del certificato per crittografare il suo messaggio. La società A con la chiave privata del certificato SSL è l'unica che può decrittografare il messaggio.
Mohsen Heydari,

Immagino che la compagnia A sia un maschio.
DimiDak,

5

Lasciami spiegare con un esempio.

Nella normale PKI basata su coppie di chiavi, ci sono chiave privata e chiave pubblica.

In un sistema basato su certificati, ci sono chiave privata e certificato. Il certificato contiene più informazioni della chiave pubblica.

Demo (è possibile generare un certificato e una chiave privata): http://www.selfsignedcertificate.com/

Puoi scaricare il file della chiave privata e il file del certificato, vedi che il file del certificato contiene molte informazioni come mostrato di seguito. inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

È possibile abbinare il certificato generato (apertura da un editor di testo) e la chiave privata (apertura da un editor di testo) da questo sito: https://www.sslshopper.com/certificate-key-matcher.html

Se il certificato corrisponde alla chiave privata del client, il client è sicuro che quel certificato viene fornito dal client o dall'agente di fiducia (CA) del client.

Tuttavia, ci sono problemi solo nella chiave privata e nella comunicazione basata su certificati .

Perché, chiunque può generare il proprio certificato e chiave privata, quindi una semplice stretta di mano non dimostra nulla sul server diverso da quello che il server conosce la chiave privata che corrisponde alla chiave pubblica del certificato. Un modo per risolvere questo problema è quello di avere il cliente ha un insieme di uno o più certificati si fida. Se il certificato non è nel set, il server non è attendibile .

Ci sono molti aspetti negativi di questo semplice approccio. I server dovrebbero essere in grado di passare a chiavi più potenti nel tempo ("rotazione delle chiavi"), che sostituisce la chiave pubblica nel certificato con una nuova. Sfortunatamente, ora l'app client deve essere aggiornata a causa di una modifica essenzialmente alla configurazione del server. Ciò è particolarmente problematico se il server non è sotto il controllo dello sviluppatore dell'app, ad esempio se si tratta di un servizio Web di terze parti. Questo approccio ha anche problemi se l'app deve comunicare con server arbitrari come un browser Web o un'app di posta elettronica.

Al fine di affrontare questi aspetti negativi, i server sono in genere configurati con certificati di emittenti noti chiamati autorità di certificazione (CA). La piattaforma host (client) generalmente contiene un elenco di CA note di cui si fida. Simile a un server, una CA ha un certificato e una chiave privata. Quando si emette un certificato per un server, la CA firma il certificato del server utilizzando la sua chiave privata. Il client può quindi verificare che il server disponga di un certificato emesso da un'autorità di certificazione nota alla piattaforma.

Tuttavia, risolvendo alcuni problemi, l'utilizzo delle CA ne introduce un altro. Poiché la CA emette certificati per molti server, è comunque necessario un modo per assicurarsi di comunicare con il server desiderato. Per risolvere questo problema, il certificato emesso dalla CA identifica il server con un nome specifico come gmail.com o un set di host con caratteri jolly come * .google.com.

L'esempio seguente renderà questi concetti un po 'più concreti. Nello snippet di seguito da una riga di comando, il comando s_client dello strumento openssl esamina le informazioni sul certificato del server di Wikipedia. Specifica la porta 443 perché è l'impostazione predefinita per HTTPS. Il comando invia l'output di openssl s_client a openssl x509, che formatta le informazioni sui certificati secondo lo standard X.509. In particolare, il comando richiede l'oggetto, che contiene le informazioni sul nome del server e l'emittente, che identifica la CA.

$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer
subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org
issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA

Puoi vedere che il certificato è stato emesso per server corrispondenti a * .wikipedia.org dalla CA RapidSSL.

Come puoi vedere, grazie a queste informazioni aggiuntive inviate da CA ai server, il client può facilmente sapere se sta comunicando con il suo server o meno.


3

Un certificato SSL viene ottenuto da un'autorità di certificazione attendibile, che garantisce la connessione sicura del sito Web. I certificati SSL di solito contengono il logo di autenticazione e anche le chiavi pubbliche necessarie per crittografare e decrittografare i dati che devono essere inviati al computer. Funzioni chiavi SSL

Diverse chiavi SSL possono essere generate durante una sessione. Vengono utilizzati per crittografare e decrittografare le informazioni inviate da e verso il computer. Le chiavi vengono utilizzate per verificare che le informazioni non siano state modificate o manomesse.

Differenza del ciclo di vita

I certificati durano più a lungo delle chiavi SSL. I certificati SSL sono ottenuti dall'autorità di certificazione, che può essere rinnovata regolarmente da banche e aziende. Le chiavi SSL o le chiavi di sessione, invece, vengono generate in modo univoco durante la sessione e scartate al termine della sessione.

Leggi di più qui


2

OK, suddividiamolo in modo che le persone non tecniche possano capire.

Pensala in questo modo. Un certificato è come una cassetta di sicurezza presso la tua banca. Contiene molte cose importanti; generalmente cose che contengono la tua identità. Il certificato ha una chiave pubblica e ha bisogno di una chiave privata per aprirlo.

Anche la tua cassetta di sicurezza richiede due chiavi per aprirsi, proprio come un certificato.
Con una cassetta di sicurezza, la chiave del banchiere è come la chiave pubblica poiché rimane in banca e la chiave pubblica rimane con il certificato. Hai la chiave privata, necessaria per "ottenere il tuo certificato" e nell'esempio della cassetta di sicurezza, oltre alla chiave pubblica, è necessaria la tua chiave privata.

Prima di poter effettivamente aprire la tua cassetta di sicurezza, devi prima verificare la tua identità (un po 'come una richiesta di certificato); una volta che sei stato identificato, usi la tua chiave privata insieme alla chiave pubblica per aprire la tua cassetta di sicurezza. È un po 'come fare una richiesta di certificato e quindi ottenere il certificato dall'autorità di certificazione (purché tu possa essere identificato (attendibile) e hai la chiave giusta).


3
<PiratesOfTheCarribean> Quindi stiamo cercando questa chiave! </PiratesOfTheCarribean> (Leggi: Non hai alcun senso ...)
Timo,
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.