如何从Linux中的证书链中提取根CA和从属CA?

Modified on: Sat, 30 Jun 2018 12:10:30 +0800

我有一个终端实体/服务器证书,它有一个中间证书和根证书。当我在终端实体证书上cat时,我只看到一个BEGINEND标记。它是唯一的终端实体证书。

有什么办法可以查看中间证书和根证书内容。我只需要BEGINEND标签的内容。

在Windows中,我可以看到“认证路径”中的完整证书链。以下是Stack Exchange证书的示例。

从那里我可以执行查看证书并导出它们。我可以在Windows中为root用户和中间用户执行此操作。我在Linux中寻找相同的方法。

最佳答案

从网站上,您可以:

openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null

这将显示证书链和服务器提供的所有证书。

现在,如果我将这两个证书保存到文件中,我可以使用openssl verify

$ openssl verify -show_chain -untrusted dc-sha2.crt se.crt 
se.crt: OK
Chain:
depth=0: C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com (untrusted)
depth=1: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA (untrusted)
depth=2: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA

-untrusted选项用于提供中间证书; se.crt是要验证的证书。 depth = 2结果来自系统可信CA存储。

如果您没有中间证书,则无法执行验证。这就是X.509的工作原理。

根据证书的不同,它可能包含一个URI来获取中间证。例如,openssl x509 -in se.crt -noout -text包含:

        Authority Information Access: 
            OCSP - URI:http://ocsp.digicert.com
            CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt

“CA Issuers”URI指向中间证书(采用DER格式,因此您需要使用openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem将其转换为进一步使用OpenSSL)。

如果您运行openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hash,您将获得244b5494,您可以在系统根CA存储中查找/etc/ssl/certs/244b5494.0(只需将.0附加到名称上)。

我不认为有一个很好的,简单的OpenSSL命令可以为你完成所有这些。

作者:,derobert

相关问答

添加新评论