如何在命令行上验证SSL证书?


Answers:


61

假设您的证书采用PEM格式,则可以执行以下操作:

openssl verify cert.pem

如果您的“ ca-bundle”是包含PEM格式的其他中间证书的文件:

openssl verify -untrusted ca-bundle cert.pem

如果未将openssl设置为自动使用一组已安装的根证书(例如,中的/etc/ssl/certs),则可以使用-CApath-CAfile指定CA。


9
警告,openssl verify命令比您预期的要宽松!默认情况下,除了检查给定的CAfile之外,它还会检查系统的certs目录(例如/ etc / ssl / certs)中是否有匹配的CA。为防止此行为并确保您正在对照由CAfile给出的特定CA证书进行检查,还必须传递不存在目录的-CApath选项,例如:openssl verify -verbose -CApath nosuchdir -CAfile cacert.pem服务器.crt
DSimon

2
另一个警告:如果使用,-CApath nosuchdir则server.crt和cacert.pem的组合必须包含根CA;否则,请参见第4章。如果openssl只能与这些文件一起工作到中间CA,则它将抱怨。
DSimon

它说中没有这样的文件/certs/。这会引起问题吗?因为即时通讯在我的服务器可以工作的情况下堆叠在一起,所以http curl可以工作,但是https .. curl会出错。网站停止工作的地方。
Giorgi Gvimradze

18

这是验证证书链的一种方法:

openssl verify -verbose -x509_strict -CAfile ca.pem -CApath nosuchdir cert_chain.pem

这不需要在任何地方安装CA。

有关详细信息,请参见https://stackoverflow.com/questions/20409534/how-does-an-ssl-certificate-chain-bundle-work


1
警告,-CAfile选项比您预期的要宽松。有关详细信息,请参见我对已接受答案的评论。
DSimon

1
@DSimon,我-CApath nosuchdir将此添加为答案。谢谢。
Vadzim

没问题,很乐意提供帮助。:-)我在发表之前的评论后想出了一个警告:如果指定的文件-CAfile本身只是一个中间证书,则openssl会抱怨。这是正确的行为,因为verify直到根CA 一直都需要完整的链,但是这可能会产生误导。
DSimon

2
我的版本(OpenSSL 1.1.1 11 Sep 2018)要求参数-CApath必须是现有目录。
杰克·科布
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.