Ruby中的OpenSSL:私钥的PKCS#8格式

4

我使用以下代码在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个回答

2

我想我找到了一种方法,通过对OpenSSL :: PKey :: RSA类进行黑客攻击,以PKCS#8格式输出。这种方法相当丑陋,需要进行整理,但可以创建有效的记录:

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

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

这个方法与通常的to_pem方法类似,但会调用不同的OpenSSL导出器方法。


你好,你有代码随便放在哪里吗?编辑:显然是 https://github.com/twg/openssl_pkcs8 - Michael Siebert
是的,就是这样。此外,为了方便起见,它也被打包成了一个gem。不过,我在Ruby 2.0上使用时遇到了一些问题。 - tadman
2
@tadman 我已经更新了 Ruby 2.2.1 的代码,现在它可以完美运行。你的 gem 在这里有一个 pull request:https://github.com/twg/openssl_pkcs8/pull/4 - Jim Flood

2

现在Ruby主干支持将私钥导出为PKCS#8格式,使用OpenSSL::PKey::PKey(和子类)上的新方法private_to_pemprivate_to_der。因此,如果您喜欢尝试最新功能,那么现在或者即将可以原生地写出PKCS#8密钥。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接