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?