Perché non riesco a verificare questa catena di certificati?


16

Ho tre certificati in una catena:

  • root.pem
  • intermediate.pem
  • john.pem

Quando li esamino usando openssl x509 -in [filename] -text -nooutsembrano a posto, root.pem sembra che sia autofirmato (Emittente == Oggetto), e l'oggetto di ciascun certificato è l'Emittente di quello successivo, come previsto.

E infatti posso verificare la catena fino al certificato intermedio:

$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK

Tuttavia, john.pem non riesce:

$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate

Per quanto ne so, ciò significa che openssl non è in grado di trovare l'emittente per intermedio.pem. Il che non ha senso poiché root.pem è in effetti l'emittente di intermedio.pem.

Cosa mi sto perdendo?


Modifica: avevo originariamente pubblicato una risposta dicendo che root.pem e intermedio.pem dovevano essere concatenati in un file, e quindi si dovrebbe usare questo file come parametro per -CAfile. Questo è SBAGLIATO, perché si fida implicitamente di intermedio.pem, come sottolinea Johannes Pille . Leggi il link che ha pubblicato nella mia risposta eliminata: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html


Elimina la tua risposta, è pericolosa disinformazione!
Johannes Pille,

1
@JohannesPille Fatto, grazie per l'informazione
Jong Bor,

Complimenti per averlo effettivamente fatto e la reazione rapida.
Johannes Pille,

Risposte:


14

Non è necessario raggruppare i due certificati per verificarli.

Se si dispone dei tre certificati seguenti:

  • root.pem: memorizza un certificato autofirmato.
  • intermedio.pem - memorizza un certificato firmato da root.pem
  • john.pem - memorizza un certificato firmato da intermedio.pem

E ti fidi solo di root.pem, quindi verrai verificato john.pemcon il seguente comando:

openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem

Se tu avessi molti intermedi, potresti semplicemente fare una catena -untrusted intermediate2.pem -untrusted intermediate3.pem ...


Questo. È l'unica risposta giusta.
Johannes Pille,

Ho pensato che se avessi entrambi i certificati CA intermedi e radice nel pacchetto li opensslavrei presi e verificati i certificati. C'è una ragione per cui questo sarebbe successo? Ad esempio, la persona che ha firmato il certificato utente non l'ha firmato con l'intermediario ma con il root o qualcosa del genere?
FilBot3,

L'ultima frase di questa risposta è sbagliata. Se si hanno molti intermedi, è necessario concatenarli in un file intermedio, quindi utilizzare il untrustedflag una volta. L'uso del flag non attendibile più volte non funziona.
AjaxLeung,

1
@AjaxLeung - funzionano entrambe le -untrustedopzioni multiple (in qualsiasi ordine) o un'unica -untrustedopzione che punta a un fascio di intermedi (concatenati in qualsiasi ordine). Questo è con OpenSSL versione 1.1.1c su Ubuntu.
garethTheRed

Sì, mi sono sbagliato. Penso che non stavo usando i file giusti al momento in cui ho scritto il commento.
AjaxLeung

3

quello che ha detto @antiduh funziona solo per un singolo caso di certificato intermedio per me. Aggiungendo più di uno -untrusted intermediate.pemnel comando sembra non funzionare. Non sono sicuro che sia correlato alla versione specifica di openssl.

Secondo il documento openssl: [ https://linux.die.net/man/1/verify]

file di fiducia

Un file di certificati non attendibili. Il file dovrebbe contenere più certificati

Nel mio caso ho una catena come: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

da cat intermedio1.pem & intermedio2.pem in un singolo file intermedio-catena.pem e quindi eseguire openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pemfunziona per me.

Sembra anche l'estensione in ca che è necessario impostare, basicConstraints = CA:truealtrimenti continuo a riscontrare errori di verifica di openssl.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.