複数の証明書が1つのファイルに結合されている場合に証明書内容を表示したい

「openssl x509 -in filename -text」コマンドで証明書内容を表示できるが、複数の証明書が1ファイルにまとまっている場合、OpenSSLでは1つ目の証明書しか表示してくれないようだ。

証明書を1つ1つファイルに分割すれば良いが‥手間だ。 mac OS X のOpenSSLのCA証明書はBASE64の証明書の連結で中身がわからない‥ 何か方法はないかと調べていると、素晴らしいスクリプトがあった!

Certificate Management with OpenSSL - General Stuff


#!/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;

実行権限を与え、引数にファイル名を指定して証明書内容が表示できた。

./certdump.pl /usr/local/etc/openssl/cert.pem