事象
Linux環境でopensslコマンドを使い、証明書(cert.crt)のsubjectを表示しようとすると「unable to load certificate」で始まるエラーが出る
# openssl x509 -in cert.crt -noout -subject unable to load certificate ....
解決策
引数-informにてDERと指定する。
# openssl x509 -in cert.crt -inform der -noout -subject subject= /C=JP/ST=Tokyo....
以下、ポイントです。
ポイント
証明書関連のファイル拡張子はCertificateの略としてcrtとして配布されることがあります。
私のWindows環境でファイルエクスプローラーで確認すると、「セキュリティ証明書」として見え、ダブルクリックすると「暗号化シェル拡張」というプログラムによって内容が確認できます。
こちらをUNIX系のCUIで確認しようとするためにはopensslコマンドを用います。
ただし、opensslコマンドは特に指定しなければPEM形式としてファイルを認識することに注意しなければいけません。
PEMとDER
DERもPEMも、どちらも証明書を表現するフォーマットなのですが
DERはバイナリ、PEMはテキストです。
なのでCRTがどちらなのかをまず確認する必要があります。
crtファイルのタイプを確認
ファイルのタイプを確認する「file」コマンドを用いてみます。dataとなっていればバイナリーと思われます。
# file cert.crt cert.crt: data
逆にpem形式であればPEM certificateと出力されます。
inform DER をつける
crtファイルがバイナリーと思われるので、冒頭のように「-inform DER」 をつけてあげれば実施したい処理を行います。
ちなみにこちらをPEMに変換したければ以下で可能なので合わせて記載しておきます。
# openssl x509 -in cert.crt -inform DER -out test.pem -outform pem
以上、備忘録でした。