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

pde*_*eva 157 security ubuntu ssl openssl ssl-certificate

我有一个证书包 .crt 文件。

openssl x509 -in bundle.crt -text -noout只显示根证书。

我如何查看所有其他证书?

Ben*_*kin 194

http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587建议采用这种单行方式:

openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
Run Code Online (Sandbox Code Playgroud)

它确实对我有用,但我不明白细节所以不能说是否有任何警告。

  • 这是最好的答案 - 我什至不会发布我过度杀戮的 Python 解决方案!省略“-text”以获取每个证书的主题/颁发者信息。 (13认同)
  • 为了后代的利益,这是“CRL 2”,而不是“CR 12”——`crl2pkcs7` (4认同)
  • 它仅使用 pkcs7 作为中间件。输入是串联的 PEM。 (3认同)
  • 这个答案已经过时了。(现在)正确的答案如下:https://serverfault.com/a/1079893/22361 (2认同)

小智 38

openssl storeutl -noout -text -certs bundle.crt
Run Code Online (Sandbox Code Playgroud)
摘自OpenSSL 文档

openssl storeutl应用程序已添加到 OpenSSL 1.1.1 中。

storeutl命令可用于显示从给定 URI 获取的内容。

  • -noout防止 PEM 数据输出
  • -text以文本形式打印出对象,如-text输出openssl x509
  • -certs仅选择给定 URI 中的证书


小智 33

Javakeytool可以解决这个问题:

keytool -printcert -v -file <certs.crt>
Run Code Online (Sandbox Code Playgroud)

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

结果:

  1. .crt不显示文件中第一个证书以外的所有内容
  2. 您可能会看到与文件中显示的信任链不同的信任链.crt。这可能会导致错误的结论。


Mad*_*ter 22

遵循这个常见问题让我找到了这个 perl 脚本,它强烈建议我openssl没有本地支持处理捆绑中的n证书,相反我们必须使用一些工具在输入每个之前对输入进行切片和切块证书到openssl. 这个 perl 脚本,从上面链接的 Nick Burch 的脚本中自由改编,似乎可以完成这项工作:

#!/usr/bin/perl
# script for splitting multi-cert input into individual certs
# Artistic Licence
#
# v0.0.1         Nick Burch <nick@tirian.magd.ox.ac.uk>
# v0.0.2         Tom Yates <tyates@gatekeeper.ltd.uk>
#

$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;
Run Code Online (Sandbox Code Playgroud)


har*_*rmv 19

Oneliner 显示文件中每个证书的摘要。

openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout
Run Code Online (Sandbox Code Playgroud)

(相似 serverfault.com/a/755815/27515,但这提供了更短的输出,没有 --text 选项)。

例子:

$ openssl crl2pkcs7 -nocrl -certfile bundled.crt | openssl pkcs7 -print_certs -noout

subject=/C=NL/postalCode=5705 CN/L=City/street=Example 20/O=Foobar B.V./OU=ICT/OU=Wildcard SSL/CN=*.example.com
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA

subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority

subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
issuer=/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Roo
Run Code Online (Sandbox Code Playgroud)

  • ...例如这与 https://serverfault.com/a/755815/27515 有何不同 (2认同)

sud*_*acy 6

由于没有基于 awk 的解决方案:

$ cat ca-bundle | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > i ".extracted.crt" }'
$ ls *.extracted.crt | while read cert; do openssl x509 -in $cert -text -noout; done
Run Code Online (Sandbox Code Playgroud)

第一个命令通过查找 BEGIN 和 END 行将捆绑包拆分为证书。第二个命令循环遍历提取的证书并显示它们。

  • awk 中的打印重定向功能在 gawk 和 nawk 中可用,但在 basic awk 中不可用。因此,这可以在 Linux 上运行(gawk 链接为 awk),但可能不适用于具有基本 awk 的 OS X。 (2认同)