为什么我不能验证此证书链?


16

我有一连串的三个证书:

  • root.pem
  • 中间件
  • 约翰·佩姆

当我使用openssl x509 -in [filename] -text -noout它们进行检查时,它们看起来不错,root.pem看起来就像是自签名的(Issuer == Subject),并且每张证书的Subject都是下一个证书的Issuer。

实际上,我可以验证到中间证书的链:

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

但是,john.pem失败:

$ 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

据我所知,这意味着openssl无法找到middle.pem的发行者。这没有任何意义,因为root.pem实际上是middle.pem的颁发者。

我想念什么?


编辑:我最初发布了一个答案,说root.pem和intermediate.pem应该连接在一个文件中,然后应该使用该文件作为参数-CAfile。正如约翰内斯·皮耶Johannes Pille)指出的那样,这是错误的,因为它隐式地信任middle.pem。阅读他在我已删除的答案中发布的链接:https : //mail.python.org/pipermail/cryptography-dev/2016-August/000676.html


请删除您的答案,这是错误的危险信息!
约翰内斯·皮勒

1
@JohannesPille完成,谢谢您的信息
Jong Bor

实际做起来和快速反应的荣誉。
约翰内斯·皮勒

Answers:


14

您不必将两个证书放在一起即可对其进行验证。

如果您具有以下三个证书:

  • root.pem-存储自签名证书。
  • middle.pem-存储由root.pem签名的证书
  • john.pem-存储由middle.pem签名的证书

并且您仅信任root.pem,然后可以john.pem使用以下命令进行验证:

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

如果您有许多中间体,您可以连锁 -untrusted intermediate2.pem -untrusted intermediate3.pem ...


这个。是唯一正确的答案。
约翰内斯·皮勒

我认为,如果捆绑包中同时包含中级和根CA证书,openssl则会选择这些证书并验证证书。有什么原因会发生这种情况吗?就像,签署用户证书的人不是用中级证书而是根目录来签名?
FilBot3

这个答案的最后一句话是错误的。如果您有许多中间件,则需要将它们串联到一个中间文件中,然后使用该untrusted标志一次。多次使用不受信任的标志不起作用。
AjaxLeung

1
@AjaxLeung-多个-untrusted选项(以任何顺序)或-untrusted指向中间捆绑包的单个选项(以任何顺序连接)均可使用。这是Ubuntu上的OpenSSL 1.1.1c版本。
garethTheRed

是的,我误会了。我认为在撰写评论时,我只是没有使用正确的文件。
AjaxLeung

3

@antiduh所说的对我来说仅适用于单个中间证书案例。通过-untrusted intermediate.pem在命令中添加多个似乎无效。不确定是否与特定的openssl版本有关。

根据openssl文件:[ https://linux.die.net/man/1/verify]

-不可信文件

不受信任的证书文件。该文件应包含多个证书

就我而言,我有一个像这样的连锁店: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

通过将cat中间体1.pem和中间体2.pem合并为一个中间体-chain.pem文件,然后openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pem为我运行作品。

似乎您还需要设置in ca扩展名,basicConstraints = CA:true否则我仍然遇到openssl验证报告错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.