将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标记放在顶部和底部,然后加载密钥。
证书能够处理以OpenSSL的PEM格式编码的DER编码证书和证书。
您可以在此处找到有关Ruby的OpenSSL实现的文档: