我有一个证书包 .crt 文件。
这样做openssl x509 -in bundle.crt -text -noout
仅显示根证书。
我如何查看所有其他证书?
答案1
http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587建议使用以下一行代码:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
它确实对我有用,但我不了解细节,所以不能说是否有任何注意事项。
6月22日更新:
对于 openssl 1.1.1 及更高版本:可以在此处找到单命令答案serverfault.com/a/1079893(openssl storeutl -noout -text -certs bundle.crt
)
答案2
Javakeytool
可以解决这个问题:
keytool -printcert -v -file <certs.crt>
注解: Windows 双击不起作用。Windows 仅读取密钥库中的第一个证书,并自动从其内置证书库扩展信任链。
结果:
- 文件中第一个证书以外的所有证书
.crt
均不显示 - 显示的信任链可能与文件中的信任链不同
.crt
。这可能会导致错误的结论。
答案3
openssl storeutl -noout -text -certs bundle.crt
摘自OpenSSL 文档:
该openssl storeutl
应用程序已添加到 OpenSSL 1.1.1 中。
该storeutl
命令可用于显示从给定 URI 获取的内容。
-noout
阻止 PEM 数据的输出-text
以文本形式打印出对象,-text
就像openssl x509
-certs
仅从给定的 URI 选择证书
答案4
下列的此常见问题解答引导我这个 perl 脚本,这非常强烈地表明,它openssl
没有原生支持处理n第 100个证书,而我们必须使用一些工具在将每个证书提供给 之前对输入进行分片和切块openssl
。这个 perl 脚本(自由改编自上面链接的 Nick Burch 的脚本)似乎可以完成这项工作:
#!/usr/bin/perl
# script for splitting multi-cert input into individual certs
# Artistic Licence
#
# v0.0.1 Nick Burch <[email protected]>
# v0.0.2 Tom Yates <[email protected]>
#
$filename = shift;
unless($filename) {
die("You must specify a cert file.\n");
}
open INP, "<$filename" or die("Unable to load \"$filename\"\n");
$thisfile = "";
while(<INP>) {
$thisfile .= $_;
if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
print "Found a complete certificate:\n";
print `echo \'$thisfile\' | openssl x509 -noout -text`;
$thisfile = "";
}
}
close INP;