如何查看捆绑包中的所有 SSL 证书?

如何查看捆绑包中的所有 SSL 证书?

我有一个证书包 .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/1079893openssl storeutl -noout -text -certs bundle.crt

答案2

Javakeytool可以解决这个问题:

keytool -printcert -v -file <certs.crt>

注解: Windows 双击不起作用。Windows 仅读取密钥库中的第一个证书,并自动从其内置证书库扩展信任链。

结果:

  1. 文件中第一个证书以外的所有证书.crt均不显示
  2. 显示的信任链可能与文件中的信任链不同.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;

相关内容