OpenSSLで、秘密鍵や公開鍵をpemにするとかderにするとか、
その都度グーグルで調べるのが非常に面倒くさいので、自分が必要としていることをピンポイントでここに残すことにした。
前提
フォーマットについて、
pemはテキストになっていて、Base64で変換されている形式
derはバイナリの形式。
証明書でも秘密鍵でもこれらの形式にできる。
説明用として、とりあえず鍵ペアを用意した。
秘密鍵をfoobar.keyとし、公開鍵をfoobar.crtと言う名前にしておく。
この2つのファイルは両方共pem形式になっている
pemからderへ
秘密鍵の場合 openssl rsa -in foobar.key -out foobar.der.key -outform der 公開鍵の場合 openssl x509 -in foobar.crt -out foobar.der.crt -outform der
秘密鍵の場合はrsaとかき、公開鍵の場合はx509と書く。
foobar.der.keyとfoobar.der.crtという2つのder形式のファイルを作るようになっている。
opensslコマンドはデフォルトで入出力するファイルはpemとして認識するようになっている。
derとして出力する場合は-outformで明示的にderと書かなければならない。
derからpemへ
秘密鍵の場合 openssl rsa -in foobar.der.key -inform der -out foobar.pem.key 公開鍵の場合 openssl x509 -in foobar.der.crt -inform der -out foobar.pem.crt
基本的にpemからderと変わらない。
入力ファイルがderなので、こちらは-informでderと指定しなけっればならない。
証明書と鍵がペアなのかを調べる
秘密鍵をpem → der と変換、さらにder →pemと変換してつまりpemに戻ってきたわけだが、なぜか中身が違っていた。
同じものになるはずなのに、そんなことがあるのだろうか?
本当に同じ証明書か秘密鍵かどうか確認する方法はこちら。
同じペアだったら同じ値が返ってくる。
openssl x509 -noout -modulus -in foobar.pem.crt | md5sum openssl rsa -noout -modulus -in foobar.der.key -inform der | md5sum openssl rsa -noout -modulus -in foobar.pem.key | md5sum openssl rsa -noout -modulus -in foobar.key | md5sum
証明書と鍵がペアならば、このコマンドででる値は全く同一のものになる。
その結果、すべて同じだった。
どうして最初のpem(foobar.key)と2回変換して戻ってきたpem(foobar.pem.key)が違うのかがこのコマンドを実行してわかった。
foobar.keyの方のみパスフレーズを聞かれた。
foobar.pem.keyのほうはパスフレーズ込みで変換されたのかもしれない。
ちなみに、このコマンドも他のものと同じように、der形式の場合は-informで指定する。
公開鍵ならばx509 秘密鍵ならばrsaを指定する。
pkcs12に変換する
この形式は公開鍵と秘密鍵を一緒に安全に保管し、交換するために使われる形式でだそうだ。
Java関連では鍵ストアとしてこの形式を使うことがある。
その変換方法はこちら。
秘密鍵と公開鍵を一緒のファイルにしている。
openssl pkcs12 -export -in foobar.crt -inkey foobar.key -out foobar.p12
これはpem形式のみ受け付けるようだ。
上のコマンドでは公開鍵と秘密鍵を一緒に纏めている。
鍵ファイルのパスフレーズだけでなく、新たにpkcs12用のパスフレーズも作らされた。
参考
http://qiita.com/kunichiko/items/12cbccaadcbf41c72735