使用 openssl 根据 CRL 验证证书链
Verify certificate chain against CRL with openssl
我正在尝试了解证书和 CRL 处理,因此我创建了以下示例证书链:
根 CA(自签名)→ 中间 CA(由根 CA 签名)→ 服务器证书(由中间 CA 签名)
现在我想测试证书吊销是否有效。为此,我撤销了服务器证书并相应地创建了一个(中间 CA 的)CRL 文件。 X509v3 CRL 分发点存在于所有证书文件中,并且可以通过 http 访问它们,例如:
X509v3 CRL Distribution Points:
Full Name:
URI:http://127.0.0.1:80/intermediate_ca.crl
(这是我刚刚创建的 CRL。(对于 http://127.0.0.1:80/ca.crl 处的根 CA CRL 也是如此。)我仔细检查了它们确实存在并且可以通过该 URI 访问。)
接下来,我cat
将Root CA pem
文件和Intermediata CA pem
文件放入CAChain.pem
。
我想要一个命令来接收服务器证书以及 CAChain.pem
和 "crawls up" 证书链,以便对其进行全面验证。
我试过
openssl verify -extended_crl -crl_check_all -crl_download -CAfile CAChain.pem -verbose serverCert.pem
但我刚得到:
Error loading CRL from http://127.0.0.1:80/ca.crl
140041593399104:error:27076072:OCSP routines:parse_http_line1:server response error:crypto/ocsp/ocsp_ht.c:260:Code=404,Reason=Not Found
...
error 3 at 0 depth lookup: unable to get certificate CRL
同样,CRL 确实 出现在指定的 URI 中。这就是我无法解释错误 404 的原因。(另外,我觉得这个错误是由 OSCP 模块引起的,因为我目前只是在使用 CRL。)
如果有人能告诉我我的错误是什么以及如何实现我最初的意图(使用 CRL 验证整个证书链),我将不胜感激。提前致谢!
确实我犯的错误主要有两个:
- CRL文件必须是DER格式,我不知道。 (从 PEM 格式转换很简单:
openssl crl -in ${crlFile}.pem -outform DER -out ${crlFile}
)。
- 当然,证书的 CRL 分发点必须是其 父 CA 之一。 (因此,例如,对于我的中间 CA,它必须是根 CA 之一。)
牢记这一点并将中间 CA 证书链接到服务器证书,正如 dave_thompson_085s 非常有用的评论所建议的那样,原始命令
openssl verify -extended_crl -crl_check_all -crl_download -CAfile CAChain.pem -verbose serverCert.pem
现在有效。
我已经创建了一个 gist 到目前为止我所做的事情。它仍然很丑陋 - 我会整理它并在未来尝试 OCSP。
我正在尝试了解证书和 CRL 处理,因此我创建了以下示例证书链:
根 CA(自签名)→ 中间 CA(由根 CA 签名)→ 服务器证书(由中间 CA 签名)
现在我想测试证书吊销是否有效。为此,我撤销了服务器证书并相应地创建了一个(中间 CA 的)CRL 文件。 X509v3 CRL 分发点存在于所有证书文件中,并且可以通过 http 访问它们,例如:
X509v3 CRL Distribution Points:
Full Name:
URI:http://127.0.0.1:80/intermediate_ca.crl
(这是我刚刚创建的 CRL。(对于 http://127.0.0.1:80/ca.crl 处的根 CA CRL 也是如此。)我仔细检查了它们确实存在并且可以通过该 URI 访问。)
接下来,我cat
将Root CA pem
文件和Intermediata CA pem
文件放入CAChain.pem
。
我想要一个命令来接收服务器证书以及 CAChain.pem
和 "crawls up" 证书链,以便对其进行全面验证。
我试过
openssl verify -extended_crl -crl_check_all -crl_download -CAfile CAChain.pem -verbose serverCert.pem
但我刚得到:
Error loading CRL from http://127.0.0.1:80/ca.crl
140041593399104:error:27076072:OCSP routines:parse_http_line1:server response error:crypto/ocsp/ocsp_ht.c:260:Code=404,Reason=Not Found
...
error 3 at 0 depth lookup: unable to get certificate CRL
同样,CRL 确实 出现在指定的 URI 中。这就是我无法解释错误 404 的原因。(另外,我觉得这个错误是由 OSCP 模块引起的,因为我目前只是在使用 CRL。)
如果有人能告诉我我的错误是什么以及如何实现我最初的意图(使用 CRL 验证整个证书链),我将不胜感激。提前致谢!
确实我犯的错误主要有两个:
- CRL文件必须是DER格式,我不知道。 (从 PEM 格式转换很简单:
openssl crl -in ${crlFile}.pem -outform DER -out ${crlFile}
)。 - 当然,证书的 CRL 分发点必须是其 父 CA 之一。 (因此,例如,对于我的中间 CA,它必须是根 CA 之一。)
牢记这一点并将中间 CA 证书链接到服务器证书,正如 dave_thompson_085s 非常有用的评论所建议的那样,原始命令
openssl verify -extended_crl -crl_check_all -crl_download -CAfile CAChain.pem -verbose serverCert.pem
现在有效。
我已经创建了一个 gist 到目前为止我所做的事情。它仍然很丑陋 - 我会整理它并在未来尝试 OCSP。