Techioz Blog

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 キーをネイティブに書き出すことができるようになります。