验证 Bash 中的 PEM 证书有错误但 return 代码正常

Verify PEM-Certificate in Bash with error but return code OK

我想验证证书是否由子 CA 颁发。我使用以下命令:

openssl verify -verbose -CAfile "/usr/share/jenkins/sub-ca.crt" cert.crt

cert.crt在本例中是一个自签名证书,因此它不是由子ca.crt颁发的。 sub-ca.crt 是我们root-ca颁发的证书。 当我 运行 命令时,它显示正确的错误:

error 18 at 0 depth lookup:self signed certificate

但是在这一行下面 好的 显示,当我用 $? 检查 return 代码时?我得到 0 作为 return 代码。 为什么发生错误时命令 return 正常?

verify 命令尝试建立证书链,验证链是否完整,检查目的,检查信任设置,检查整个链的有效性(例如,根据时间等),等等

由于 verify 是一个诊断工具,它的 return 代码并不意味着证书已成功验证,它意味着命令成功 运行 完成,没有任何致命错误。某些 类 错误被视为非致命错误,例如:自签名证书、证书过期、处理证书扩展的错误等。非致命错误仍将显示,但不会影响最终 "OK"结果。

在这种情况下 OpenSSL 命令返回的错误 18 表示它是在深度 0 处找到的自签名证书,并且自签名证书不存在于它的内部存储中(或者在这个命令的情况下,它没有与 -CAfile 选项一起提供。

通常,OpenSSL 会尝试根据为验证提供的证书或证书链以及作为 -CAfile 或 -CAPath 选项的一部分给出的证书来形成证书链及其颁发者。

它期望链中的自签名证书(即链中最顶层的证书)也应作为 -CAfile 或 -CAPath 选项的一部分出现,即它们受到验证者的信任。

在问题中,情况并非如此,因此出现错误。