Esiste un modo per differenziare i certificati forniti come parte della catena di certificati da quelli già presenti nell'archivio di fiducia?

1

OpenSSL mostra la seguente catena di certificati per example.com:443.

$ openssl s_client -connect example.com:443 < /dev/null | head -10
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
DONE
CONNECTED(00000003)
---
Certificate chain
 0 s:/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----

La catena di certificati ha il certificato del server rilasciato su www.example.org e un certificato intermedio che appartiene alla DigiCert SHA2 High Assurance Server CA.

Tuttavia, la catena di certificati non contiene il certificato di radice autofirmato per DigiCert High Assurance EV Root CA.

Ma sia Firefox che Chrome mostrano anche il certificato di origine come parte della catena di certificati. Questo perché questi certificati radice vengono forniti in bundle con i browser.

Voglio sapere se c'è un modo in Firefox o Chrome per capire che solo due dei tre certificati nella catena di certificati visualizzata appartengono alla catena di certificati fornita dal server nell'handshake TLS? Forse una sorta di indicatore visivo o qualche altra cosa che differenzia i certificati apparsi nella catena di certificati da quelli che fanno parte dell'archivio fidato del browser?

    
posta Lone Learner 04.05.2017 - 16:42
fonte

1 risposta

1

È possibile ottenere l'elenco completo dei certificati inviati dal server connettendosi al server e afferrando la catena con OpenSSL:

openssl s_client -connect www.google.com:443

Questo mostrerà (tra l'altro) l'intera catena inviata dal server

Tuttavia, è inutile per valutare la sicurezza della tua connessione (è comunque utile per il debugging).

Perché è un'informazione inutile? Bene, ci sono due possibili scenari qui:

  1. L'ancoraggio sicuro utilizzato è sicuro. In questo caso, non è possibile per un utente malintenzionato inserire un certificato non valido nella catena di attendibilità: se un determinato certificato è presente nella catena, è stato (direttamente o indirettamente) firmato dalla radice e quindi controllato da quella radice. Dal momento che ti fidi di quella radice (che è il punto qui), puoi fidarti di quel certificato. Ripeti per ogni cert della catena e hai piena fiducia.
  2. L'ancoraggio del trust è compromesso in QUALSIASI modo. Quindi non puoi fidarti di QUALSIASI certificato che abbia emesso, indipendentemente da dove provenga. Questi certificati potrebbero essere stati sostituiti con quelli esattamente identici con solo la parte della chiave pubblica cambiata e non saresti più saggio.

In nessuno di questi casi saprai da dove vengono i certificati intermedi che ti aiutano a decidere se una determinata connessione può essere considerata attendibile, quindi quell'informazione è inutile dal punto di vista della sicurezza.

Vorrei aggiungere due cose qui:

  • Questa spiegazione presuppone che non vi siano difetti nella crittografia o nel software utilizzato. Se questa ipotesi non è giusta, allora tutte le scommesse sono off (ma questo non è esattamente il contesto della domanda).
  • C'è un caso molto speciale che funziona in modo diverso: certificato pinning . In questo caso, non ti fidi di una catena di fiducia ma di un codice rigido (in un modo o nell'altro) del certificato foglia. In questo caso, la catena di fiducia non ha senso perché non è il modo in cui si afferma la fiducia della connessione.
risposta data 09.05.2017 - 11:45
fonte

Leggi altre domande sui tag