/etc/ssl/certs/ca-bundle.crt のように複数のCA証明書が連結されたファイルがありますが、どんな証明書が入っているのかなと、opensslに食わせても、どうも先頭の証明書しか情報が見えません。
# openssl x509 -in /etc/ssl/certs/ca-bundle.crt -noout -text
2番目以降の証明書の情報も見れるようなオプションがあればいいのですが、どうにも探しきれないので、諦めて証明書毎にファイルを分割します。
各証明書は
-----BEGIN CERTIFICATE-----
で必ず始まっているので、この行を検出したら別ファイルに書き出すようなawkを書いてみました。
separate-ca-certificate.awk
{
if(/BEGIN CERTIFICATE/){
filename=sprintf("prefix_%03d.crt",suffix);
suffix+=1;
}
print >> filename;
}
「BEGIN CERTIFICATE」の文字が含まれる行に出会うたびに、ファイル名のサフィックスをインクリメントして、吐き出しております。
実行コマンドは下記です
awk -f separate-ca-certificate.awk /etc/ssl/certs/ca-bundle.crt
シェルのワンライナーなら下記になります。
awk '{if(/BEGIN CERTIFICATE/){filename=sprintf("prefix_%03d.crt",suffix);suffix+=1};print >> filename}' /etc/ssl/certs/ca-bundle.crt
if文の文字列を変えれば、証明書以外のケースにも応用できますね!