pkcs7とは?
PKCSとはPublic Key Cryptography Standardsの略で、公開鍵暗号の標準規格です。
その中でも#7は証明書周りの規格です。
認証局にSSLサーバ証明書の発行を依頼した際に、納品物としてpkcs7形式の証明書が送付されることがあります。
ある認証局にサーバ証明書の発行を依頼した際に、例えば「CRT形式とPKCS7形式」の二種類で送付されたとします。
それらのファイルサイズを見ると、PKCS7形式の方が大きいはずです。
なぜPKCS7形式は大きいのか
pkcs7の特徴は中間証明書やルート証明書までひとつのファイルで配布できることにあります。
crtは自らのサーバ証明書のみとなるので、pkcs7と比べてファイルサイズが小さいということです。
例えばAapacheで読み込む場合は証明書の結合を明示的に行い、中間証明書を連結させる必要があります。
それらがpkcs7として格納可能です。
pkcs7の中身を見てみる
pkcs7と言えど、中身はPEM形式のテキストファイルです。
配布された二つのファイルをcert.pkcs7とcert.crtとして、比較のためにcert.crtを同じようにPEM形式に変換します。(cert.pem)
まずは、それぞれの先頭行と末尾の行を確認します。
$ head -n 1 cert.pem -----BEGIN CERTIFICATE----- $ tail-n 1 cert.pem -----END CERTIFICATE----- $ head -n 1 cert.plcs7 -----BEGIN CERTIFICATE----- $ tail-n 1 cert.pkcs7 -----END CERTIFICATE-----
どちらも同じ形式で
BEGIN CERTIFICATEとEND CERTIFICATEで囲まれた文字列であることが分かります。
ちなみに、plcs7の方はBEGIN CERTIFICATE等が一度ずつしか登場しないので区切りがわかりづらくなっています。
ファイルサイズよりも分かりやすい、ファイルの行数等を比較すると、以下のようにpkcs7が大きいことが分かります。
# wc cert.pem 34 36 2016 cert.pem # wc cert.pkcs7 83 85 5275 cert.pkcs7
そんなpkcs7ですが格納されている証明書群は以下のコマンドで確認できます。
$ openssl pkcs7 -in cert.pkcs7 -print_certs subject=... issuer=...CN="中間認証局名" -----BEGIN CERTIFICATE----- MIhkiG9w0BA.. ... ...ZU8zBVLvCrmnRiQ -----END CERTIFICATE----- subject=...CN="中間認証局名" issuer=...CN="ルート認証局名" -----BEGIN CERTIFICATE----- MDIGA1UEChM.. ... ...E0pEYS8oWpQ== -----END CERTIFICATE----- subject=...CN="ルート認証局名" issuer=...CN="ルート認証局名" -----BEGIN CERTIFICATE----- MIIFJADKfkaILA.... ... ...E2gcrEEYS2oincw= -----END CERTIFICATE-----
配布する認証局によっては、ルート認証局の証明書が含まれなかったりもしますが、署名のチェーンが一目瞭然で確認できます。
最後のルート証明書は自己署名ですね。
以上、pkcs7の入門記事でした。