我想验证证书是否由子CA颁发。我使用以下命令:
openssl verify -verbose -CAfile "/usr/share/jenkins/sub-ca.crt" cert.crt
cert.crt在这种情况下是一个自签名证书,因此它不是由sub-ca.crt发布的。 sub-ca.crt是我们的root-ca颁发的证书。 当我运行该命令时,它显示正确的错误:
error 18 at 0 depth lookup:self signed certificate
但是在这条线下 好 显示,当我用$检查返回代码?我得到0作为返回码。 当发生错误时,为什么命令返回OK?
答案 0 :(得分:2)
verify
命令尝试建立证书链,验证链完整,检查目的,检查信任设置,检查整个链的有效性(例如,与时间等),等等。
由于verify
是一种诊断工具,它的返回代码并不意味着证书成功验证,这意味着该命令成功运行完成而没有任何致命错误。某些类别的错误被视为非致命错误,例如:自签名证书,证书到期,错误处理证书扩展等。仍然会显示非致命错误,但不会影响最终错误" OK"结果。
答案 1 :(得分:0)
错误18表示在深度0处找到自签名证书,并且在其内部存储中不存在自签名证书(或者在此命令的情况下,它是没有与-CAfile选项一起提供。)
通常,OpenSSL会尝试形成一系列证书,并且它是基于提供用于验证的证书或证书链以及作为-CAfile或-CAPath选项的一部分提供的证书的发行者。
它期望链中的自签名证书(即链的最顶层证书)也应该作为-CAfile或-CAPath选项的一部分呈现,即它们被验证者信任。
在问题中,情况并非如此,因此也就是错误。