Ruby の OpenSSL: 秘密鍵の PKCS#8 形式
概要
次のように Ruby で RSA 秘密鍵を作成しました。
require 'openssl'
key = OpenSSL::PKey::RSA.generate(1024)
PEM または DER 形式でキーを取得できます。
key.to_pem
key.to_der
しかし、それをPKCS#8形式に変換する方法はないようです。私が思いついた最善の方法は、別のプロセスで openssl を呼び出すことです。
require 'open3'
Open3.popen3('openssl pkcs8 -topk8 -inform PEM -outform PEM -passout pass:password') do |stdin, stdout, stderr|
stdin.write(key.to_pem)
unless (err = stderr.read).empty? then raise err end
stdout.read
end
私が見つけられないより良い方法があるはずです。 Ruby の OpenSSL クラス ライブラリにはこれを行うためのメカニズムがありますか?
解決策
Ruby トランクでは、OpenSSL::PKey::PKey (およびサブクラス) の新しい private_to_pem および private_to_der メソッドを使用して、秘密鍵を PKCS#8 形式にエクスポートするためのサポートがあります。ということで、もうすぐ、あるいは最先端の環境を好むのであれば今すぐに、ついに PKCS#8 キーをネイティブに書き出すことができるようになります。