我有一个保存在本地文件中的证书(例如this one)。从命令行使用openssl
,如何显示从此证书到根CA的整个链?我试过了:
openssl verify -verbose -purpose sslserver -CApath /etc/ssl/certs InCommonServerCA.txt
并得到了这个令人困惑的输出,似乎只显示了叶证书:
InCommonServerCA.txt: C = US, O = Internet2, OU = InCommon, CN = InCommon Server CA
error 26 at 0 depth lookup:unsupported certificate purpose
OK
有什么想法吗?
答案 0 :(得分:5)
如果要验证链和目的,openssl命令是正确的。 “确定”表示链验证。该错误表明该证书用于sslserver目的存在问题。看起来您的证书是CA证书,而不是叶证书。
您想要展示什么样的连锁信息?您可以查看subject
和issuer
字段以显示链接。您在上面使用的验证命令证明了一个证书签署了另一个证书。
答案 1 :(得分:2)
对于本地证书,您可以使用以下方式查看主题和直接发行人:
openssl x509 -noout -subject -issuer -in test.crt
subject= /C=US/ST=Utah/L=SLC/O=My Organization/CN=my.server.com
issuer= /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2
但这并不表示证书是否包含任何中间证书或完整的信任链。如果您的系统无法验证链,则列出的验证命令将失败(例如:您缺少中间证书或根目录不受信任),显示如下错误消息:
错误20在0深度查找:无法获得本地颁发者证书
如果要验证文件中的每个条目,可以使用此脚本show the chain of trust for a local certificate:
~ % ssl_chain.sh google.crt
0: subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
issuer= /C=US/O=Google Inc/CN=Google Internet Authority G2
1: subject= /C=US/O=Google Inc/CN=Google Internet Authority G2
issuer= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
2: subject= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
issuer= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
google.crt: OK