新手问题 Rails 如何正确读取银联私钥证书 PFX?

geekontheway · 2015年04月16日 · 最后由 fodcool 回复于 2017年12月22日 · 5879 次阅读

如上图,下载得到的证书是一个.pfx 文件,通过命令可以转为 pem 文件:

openssl pkcs12 -in union_pay.pfx -out union_pay_cert.pem -nodes

读取这个 pem 文件中的 PRIVATE KEY 部分,保存到 PRIVATEKEY 常量中。

在 Rails 中

sign = Base64.encode64(OpenSSL::PKey::RSA.new(PRIVATEKEY).sign('sha1', data.force_encoding("utf-8"))).gsub("\n", "")

将此签名,连同其他参数,一起返回给银联,返回错误信息如下:

[9100004]Signature verification failed

假设,pfx 文件的位置为: '/tmp/test.pfx',其文件的读取密码为'11111111',则可以使用以下 ruby 代码读取 PFX 文件:

require 'openssl'

raw = File.read '/tmp/test.pfx'

pkcs = OpenSSL::PKCS12.new raw, "11111111"

# 证书
puts pkcs.certificate.to_pem 

# 私钥
puts pkcs.key.export

http://ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/PKCS12.html http://ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/X509/Certificate.html http://ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/PKey/RSA.html


以上 ruby 代码,和以下 sh 输出是一样的: openssl pkcs12 -in /tmp/test.pfx - -nodes

你好,请问你这个问题解决了么?我也是出现 [9100004]Signature verification failed 这个错误。求解

需要 登录 后方可回复, 如果你还没有账号请 注册新账号