Load PKCS#8 binary key into Ruby

后端 未结 2 1754
梦如初夏
梦如初夏 2020-12-11 16:37

I\'m trying to load a particular private key encoded in binary DER format (PKCS#8) into Ruby.

However, OpenSSL::PKey won\'t r

相关标签:
2条回答
  • 2020-12-11 17:12

    Certificate is capable of handling DER-encoded certificates and certificates encoded in OpenSSL's PEM format.

    You could find documentation about OpenSSL implementation for Ruby here :

    0 讨论(0)
  • 2020-12-11 17:23

    Yes, you can indirectly load PKCS#8 DER-encoded private keys using Ruby OpenSSL.

    OpenSSL::PKey::RSA.new will only handle PEM-formatted PKCS#8, but it is easy to read the binary DER and convert it to a PEM-formatted string and then load from the string.

    For example, with these DER-encoded private keys:

    $ 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
    

    You can do something like this:

    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')
    

    Read the DER bytes, Base64 them and put the PEM tags on top and bottom, and then load the key.

    0 讨论(0)
提交回复
热议问题