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

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

如上图,下载得到的证书是一个.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

共收到 3 条回复

假设, 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 这个错误。 求解

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