Да, вы можете косвенно загрузить PKCS # 8 DER-закодированные закрытые ключи, используя Ruby OpenSSL.
OpenSSL::PKey::RSA.new
будет обрабатывать только PKCS-8 в формате PEM, но легко прочитать двоичный 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 сверху и снизу, а затем загрузите ключ.