将PKCS#8二进制密钥加载到Ruby中

我正在尝试将以二进制DER格式(PKCS#8)编码的特定私钥加载到 Ruby中.

但是,OpenSSL :: PKey无法识别它.我可以通过做一些控制台工作并将其转换为像这样的PEM来使其工作:

openssl pkcs8 -inform DER -in file.key -passin pass:xxxxxxxx >private_key.pem

在此之后,可以正确读取密钥.

但是,因为我希望整个过程在内存中完成,而不是写入和读取文件.

所以我的问题是:是否可以将二进制编码的DER格式的私钥加载到Ruby / OpenSSL中?

感谢您的时间,

费尔南多

解决方法

是的,您可以使用Ruby OpenSSL间接加载PKCS#8 DER编码的私钥.

OpenSSL :: PKey :: RSA.new只处理PEM格式的PKCS#8,但很容易读取二进制DER并将其转换为PEM格式的字符串,然后从字符串加载.

例如,使用这些DER编码的私钥:

$openssl genrsa | openssl pkcs8 -topk8 -outform DER \
    -nocrypt -out pkcs8.key
$openssl genrsa | openssl pkcs8 -topk8 -outform DER \
    -v2 des3 -passout pass:secret -out pkcs8_des3.key

你可以这样做:

require 'openssl'
require 'base64'

def Box(tag,lines)
  lines.unshift "-----BEGIN #{tag}-----"
  lines.push "-----END #{tag}-----"
  lines.join("\n")
end

def der_to_pem(tag,der)
  Box tag,Base64.strict_encode64(der).scan(/.{1,64}/)
end

pem = der_to_pem('PRIVATE KEY',File.read('pkcs8.key'))
key = OpenSSL::PKey::RSA.new(pem)

pem2 = der_to_pem('ENCRYPTED PRIVATE KEY',File.read('pkcs8_des3.key'))
key2 = OpenSSL::PKey::RSA.new(pem2,'secret')

读取DER字节,Base64它们并将PEM标记放在顶部和底部,然后加载密钥.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...