In che modo un server convalida il messaggio Verifica certificato in SSL / TLS?

5

L'autenticazione del client può essere utilizzata in una negoziazione SSL / TLS.

Per questo, il client invierà un messaggio di verifica del certificato dopo che il server lo ha richiesto.

Il messaggio Verifica certificato contiene il certificato client che verrà verificato dal server.

La mia domanda è: come fa il server a verificare che il certificato client (contenente la chiave pubblica del cliente) sia legittimo?

    
posta Duke Nukem 01.10.2016 - 02:28
fonte

2 risposte

0

Il server ha alcune radici di fiducia, che usa o, a seconda dell'applicazione, può avere un certificato di CA, o solo il certificato di quel cliente, appuntato.

Ad ogni modo, passa attraverso il suo trust store e controlla se il certificato del cliente è firmato da qualcosa nel suo store, o se è bloccato, controllerà solo l'unica CA o certificato che è configurato per verificare.

    
risposta data 01.10.2016 - 03:59
fonte
3

La parte handshake del protocollo TLS 1.3 ha tre obiettivi:

  • scambia i certificati;
  • lasciare che il server confermi che il client ha realmente la chiave segreta associata al certificato pubblico fornito, senza scambiare la chiave segreta;
  • scambia le chiavi effimere.

Parte 1 - Fiducia del certificato

Il client invia il suo certificato con il messaggio Certificate .

Il server determina se il certificato proviene da una fonte attendibile. Verifica la firma del certificato del cliente, quindi la firma di ciascun certificato intermedio, fino a quando non trova un certificato attendibile, da un elenco di certificati attendibili sul lato server o da un'autorità di certificazione (CA) attendibile.

pseudo-codice:

  1. Alice (client) invia il suo certificato pubblico a Bob (server) e alla catena di certificati.
  2. Bob hash il certificato.
  3. Bob decrittografa il certificato utilizzando il certificato di livello superiore nella catena.
  4. Bob confronta i due risultati; se corrispondono, Bob ha la prova che il certificato è stato effettivamente firmato utilizzando il certificato della leva superiore.
  5. Bob continua attraverso la catena (passaggi 2, 3, 4) finché non trova un certificato attendibile.

Parte 2 - Fiducia del cliente

Il client invia il messaggio Certificate Verify :

struct {
  SignatureScheme algorithm;
  opaque signature<0..2^16-1>;
} CertificateVerify;

Il signature scheme indica la funzione hash utilizzata e l'algoritmo della firma.

Il signature viene prodotto dal client e verificato dal server. I dati effettivamente firmati sono conosciuti dal client e dal server e quindi non vengono nuovamente inviati (sono spazi, una stringa di contesto, un byte zero e i messaggi precedenti).

pseudo-codice:

  1. Alice (client) genera una coppia di chiavi asimmetrica.
  2. Un'autorità fidata firma la sua chiave pubblica, producendo un certificato pubblico.
  3. Alice ha cancellato i dati.
  4. Alice crittografa l'hash utilizzando la sua chiave di crittografia (la sua chiave privata).
  5. Bob (server) conosce, da un messaggio precedente: il certificato pubblico di Alice e la catena di certificati.
  6. Alice invia a Bob: firma, funzione di hash e algoritmo di firma.
  7. Bob ha cancellato i dati.
  8. Bob decrittografa la firma utilizzando il certificato pubblico di Alice.
  9. Bob confronta i due risultati; se corrispondono, Bob ha la prova che la firma è associata ai dati e la chiave privata di Alice ha generato la firma.

Ora, Alice deve mantenere la sua chiave segreta e i dati devono variare tra le richieste per evitare che Eve riesca a riprodurre la richiesta con gli stessi dati e la stessa firma.

Spero che ti aiuti a capire meglio.

Riferimenti: link
link
link
link

    
risposta data 19.08.2017 - 06:46
fonte

Leggi altre domande sui tag