【问题标题】:OpenSSL in ruby: PKCS#8 format for private keyruby 中的 OpenSSL:私钥的 PKCS#8 格式
【发布时间】:2010-02-21 03:53:56
【问题描述】:

我在 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


    【解决方案1】:

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

    key = OpenSSL::PKey::RSA.new(1024)
    
    key.to_pem_pkcs8
    # => "-----BEGIN PRIVATE KEY----- ..."
    

    此方法的工作方式与通常的 to_pem 类似,但会调用不同的 OpenSSL 导出器方法。

    【讨论】:

    • 好吧,你有代码吗?编辑:显然github.com/twg/openssl_pkcs8
    • 是的,就是这样。为了您的方便,还打包成gem。不过,我在让它在 Ruby 2.0 中工作时遇到了一些麻烦。
    • @tadman 我更新了 Ruby 2.2.1 的代码,它就像一个魅力。这里有一个关于你的 gem 的拉取请求:github.com/twg/openssl_pkcs8/pull/4
    【解决方案2】:

    支持in Ruby trunk 使用OpenSSL::PKey::PKey(和子类)上的新private_to_pemprivate_to_der 方法将私钥导出为PKCS#8 格式。 So Real Soon Now,或者现在,如果你喜欢生活在最前沿,我们终于可以原生地写出 PKCS#8 密钥。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2016-09-30
      相关资源
      最近更新 更多