Ani*_*mj' 55 ssl openssl certificates
我有一个终端实体/服务器证书,它有一个中间证书和根证书。当我cat在最终实体证书上时,我只看到一个BEGIN和END标签。它是唯一的最终实体证书。
有什么办法可以查看中间证书和根证书内容。我只需要BEGIN和END标签的内容。
在 Windows 中,我可以从“认证路径”中看到完整的证书链。下面是 Stack Exchange 证书的示例。
从那里我可以执行查看证书并导出它们。我可以在 Windows 中为 root 和中级用户做到这一点。我正在 Linux 中寻找相同的方法。
der*_*ert 52
从网站,您可以执行以下操作:
openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null
Run Code Online (Sandbox Code Playgroud)
这将显示证书链和服务器提供的所有证书。
现在,如果我将这两个证书保存到文件中,我可以使用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
Run Code Online (Sandbox Code Playgroud)
该-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
Run Code Online (Sandbox Code Playgroud)
“CA Issuers”URI 指向中间证书(以 DER 格式,因此您需要使用openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem它来转换它以供 OpenSSL 进一步使用)。
如果你运行openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hash你 get 244b5494,你可以在系统根 CA 存储中查找它/etc/ssl/certs/244b5494.0(只需附加.0到名称)。
我认为没有一个好的、简单的 OpenSSL 命令可以为您完成所有这些。
est*_*ani 38
tl;dr - 一个 liner bash 魔术来转储链中的所有证书
openssl s_client -showcerts -verify 5 -connect wikipedia.org:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}'; for cert in *.pem; do newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p' | tr '[:upper:]' '[:lower:]').pem; echo "${newname}"; mv "${cert}" "${newname}"; done
Run Code Online (Sandbox Code Playgroud)
分两步解释
将链中的所有证书转储到当前目录cert${chain_number}.pem:
openssl s_client -showcerts -verify 5 -connect your_host:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}'
Run Code Online (Sandbox Code Playgroud)
将它们重命名为通用名称的奖励轨道:
for cert in *.pem; do newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p' | tr '[:upper:]' '[:lower:]').pem; mv $cert $newname; done
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现使用选项-verify 5openssl 会深入显示所有证书,甚至不包含在您的证书部署中。
如果您确实想了解您的证书提供了哪个链,您应该运行:
openssl s_client -showcerts -partial_chain -connect YOUR_ENDPOINT:443 < /dev/null |less
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177140 次 |
| 最近记录: |