OpenSSL::PKey::RSA.new(public_key) fails if public_key doesn't have -----BEGIN PUBLIC KEY-----
public_key1 = <<KEY
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
public_key2 = <<KEY
OpenSSL::PKey::RSA.new public_key1 #=> works
OpenSSL::PKey::RSA.new public_key2 #=> fails with error:
# OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key:: nested asn1 error
#1 [ruby-core:47706] Updated by Martin Bosslet about 4 years ago
- Category set to ext
- Status changed from Open to Rejected
- Assignee set to Martin Bosslet
public_key2 is not a valid PEM format (the one in public_key1). It's valid Base64, true, but that's not what OpenSSL expects. It can deal with either DER- or PEM-encoded data. In my eyes, there's nothing wrong here, or did you mean something else? Unless you object, I would close this as "Rejected" to indicate that the behavior is intended and not a bug.
PS: A clean way to deal with raw Base64 data such as in public_key2 would be to Base64-decode it first and then passing it on as in your example.