Warum kann ich diese Zertifikatskette nicht überprüfen?

Ich habe drei Zertifikate in einer Kette:

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

Wenn ich sie mit openssl x509 -in [filename] -text -noout untersuche, sehen sie gut aus, root.pem sieht so aus, als wäre es selbstsigniert (Aussteller == Betreff), und der Betreff jedes Zertifikats ist erwartungsgemäß der Aussteller des nächsten Zertifikats.

Und tatsächlich kann ich die Kette bis zum Zwischenzertifikat überprüfen:

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

Aber Johannes.pem schlägt fehl:

$ 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

An meinem besten dies bedeutet jedoch, dass openssl den Emittenten für Intermediate nicht finden kann.pem. Was seit root keinen Sinn macht.pem ist in der Tat der Emittent für Intermediate.pem.

Was fehlt mir?


Bearbeiten: Ich hatte ursprünglich eine Antwort gepostet, die besagt, dass root.pem-und Mittelstufe.pem sollte in einer Datei verkettet werden, und dann sollte man diese Datei als Parameter für -CAfile. Dies ist FALSCH, da dies implizit Ihnen vertraut.pem, als Johannes Pille Punkte aus. Lesen Sie den Link, den er in meiner gelöschten Antwort gepostet hat: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

Author: Jong Bor, 2015-04-22

2 answers

Sie müssen die beiden Zertifikate nicht zusammenfassen, um sie zu verifizieren.

Wenn Sie die folgenden drei Zertifikate haben:

  • root.pem-speichert ein selbstsigniertes Zertifikat.
  • intermediate.pem-speichert ein von root signiertes Zertifikat.pem -
  • john.pem-speichert ein von intermediate signiertes Zertifikat.pem -

Und du vertraust nur root.pem, dann würden Sie john.pem mit dem folgenden Befehl überprüfen:

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

Es Sie hatte viele Zwischenprodukte, Sie könnte einfach Kette -untrusted intermediate2.pem -untrusted intermediate3.pem ...

 18
Author: antiduh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-10-13 17:29:22

Was @antiduh sagte, funktioniert für mich nur für den Fall eines einzelnen Zwischenzertifikats. Das Hinzufügen von mehr als einem -untrusted intermediate.pem im Befehl scheint nicht zu funktionieren. Nicht sicher ist, ob es sich um eine bestimmte OPENSSL-Version handelt.

Gemäß dem openssl-Dokument: [https://linux.die.net/man/1/verify]

-nicht Vertrauenswürdige Datei -

Eine Datei mit nicht vertrauenswürdigen Zertifikaten. Die Datei sollte mehrere Zertifikate enthalten

In meinem Fall habe ich eine Kette, wie: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

Nach Katze intermediate1.pem - & intermediate2.pem in einer einzigen Zwischenkette.pem-Datei und dann ausführen openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pem funktioniert für mich.

Scheint auch die in ca-Erweiterung zu sein, die Sie set basicConstraints = CA:true Andernfalls tritt immer noch ein openssl verify Report-Fehler auf.

 3
Author: Yang Xu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-05 21:24:57