Come verificare una firma di un'entità da un'altra utilizzando la CLI di OpenSSL?

3

Sto insegnando una lezione sulle catene di certificati, quindi scarico la catena da www.google.com che ha 4 certificati. Voglio dimostrare come le dipendenze funzionano dall'emittente al soggetto mostrando che ogni entità firma il certificato di quello sottostante.

Chiama il certs g3 , g2 , g1 e g0 dove g3 è una radice autofirmata, g2 e g1 sono CA intermedie e g0 è un certificato foglia . Ci provo:

$ openssl verify g0
error 20 at 0 depth lookup:unable to get local issuer certificate

Questo ha senso: la verifica fallisce perché si tratta di un certificato foglia senza CA data. Quindi dopo provo questo:

$ openssl verify -CAfile g1 g0
g0: OK

Grande! Con l'intermedio, ora funziona! Continuando la catena:

$ openssl verify -CAfile g2 g1
g1: OK

Impressionante! Sembra che g1 sia firmato correttamente da g2 . Ma questo non è in realtà ciò che viene verificato. Poiché g1 è anche apparentemente firmato da g3 :

$ openssl verify -CAfile g3 g1
g1: OK

E infatti, g1 non ha nemmeno bisogno di una CA:

$ openssl verify g1
OK

Quindi sembrerebbe che qualsiasi certificato con CA impostato su True in Basic Constraints passerà sempre la verifica!

Domanda: come faccio a verificare che g2 abbia effettivamente firmato g1 utilizzando OpenSSL dalla CLI? E questo è un altro bug di OpenSSL? O solo un comportamento controintuitivo?

    
posta Fixee 15.03.2016 - 17:30
fonte

1 risposta

2

Credo che i g2 e g3 siano già presenti nella directory di fiducia predefinita (/ etc / ssl / certs /) che openssl usa per costruire la catena di fiducia e trovare l''ancora di fiducia'.

Nella mia configurazione:

g2 = GeoTrust Global CA
g3 = Equifax Secure Certificate Authority

Entrambi questi certificati sono presenti nella directory / etc / ssl / certs /.

Se provi lo stesso esperimento con una catena di certificati auto-generata, troverai il comportamento che ti aspetti.

    
risposta data 15.03.2016 - 23:22
fonte

Leggi altre domande sui tag