如何使Ruby读取.cer public ssl key?

Bra*_*ayn 2 encryption openssl ruby-on-rails

我正在开发一个需要电子支付模块的RoR网站.电子支付实现要求使用由它们提供的公共ssl密钥对xml数据进行编码.

我在Ruby中尝试做的事情:

public_key = OpenSSL::PKey::RSA.new(File.read(public_key_file))
Run Code Online (Sandbox Code Playgroud)

如果我只是尝试单独打开文件,它工作正常.但RSA.new()方法返回以下错误:

OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key:: nested asn1 error
    from (irb):5:in `initialize'
    from (irb):5:in `new'
    from (irb):5
Run Code Online (Sandbox Code Playgroud)

从我在在线文档中看到的,使用.pem文件但我的公钥类似于public.cer.这可能是问题吗?在e-payment公司提供的PHP示例中,密钥本身似乎没问题,同样的public.cer文件工作正常.

我究竟做错了什么?

谢谢,

ZZ *_*der 8

.cer文件很可能是在DER中编码的X.509证书.不幸的是,Ruby没有公开OpenSSL接口来读取DER中的证书.所以你需要先将DER转换为PEM.这在Ruby中相当容易,

b64 = Base64.encode64(File::read(cert_file))
pem = "-----BEGIN CERTIFICATE-----\n#{b64}-----END CERTIFICATE-----\n"
cert = OpenSSL::X509::Certificate.new(pem)
public_key = cert.public_key
Run Code Online (Sandbox Code Playgroud)