我在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类库是否具有执行此操作的机制?
答案 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_der
和OpenSSL::PKey::PKey
方法,支持in Ruby trunk用于将私钥导出为PKCS#8格式。因此,“ Real Real Soon Now”或“ Right Now”,如果您喜欢生活在不断发展的边缘,我们终于可以在本地写出PKCS#8密钥。