ruby中的OpenSSL:用于私钥的PKCS#8格式

时间:2010-02-21 03:53:57

标签: ruby openssl

我在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类库是否具有执行此操作的机制?

2 个答案:

答案 0 :(得分:0)

我想通过黑客攻击以PKCS#8格式输出的OpenSSL :: PKey :: RSA类的新方法,我找到了一种方法。它相当丑陋,可以使用一些清理,但设法创建有效的记录:

key = OpenSSL::PKey::RSA.new(1024)

key.to_pem_pkcs8
# => "-----BEGIN PRIVATE KEY----- ..."

此方法与通常的to_pem类似,但调用其他OpenSSL导出方法。

答案 1 :(得分:0)

使用private_to_pem(和子类)上的新private_to_derOpenSSL::PKey::PKey方法,支持in Ruby trunk用于将私钥导出为PKCS#8格式。因此,“ Real Real Soon Now”或“ Right Now”,如果您喜欢生活在不断发展的边缘,我们终于可以在本地写出PKCS#8密钥。