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?