为什么在Windows上的OpenSSL产生错误,但不是在CentOS:PKCS12_parse:MAC验证失败(OpenSSL的:: PKCS12 :: PKCS12Error)

问题描述:

require 'openssl' 

if ARGV.length == 2 
    pkcs12 = OpenSSL::PKCS12.new(File.read(ARGV[0]), ARGV[1]) 
    p pkcs12.certificate 
else 
    puts "Usage: load_cert.rb <path_to_cert> <cert_password>" 
end 

运行这将产生错误的窗口,但不是在Linux操作系统。为什么在Windows上的OpenSSL产生错误,但不是在CentOS:PKCS12_parse:MAC验证失败(OpenSSL的:: PKCS12 :: PKCS12Error)

错误:

OpenSSL::PKCS12::PKCS12Error: PKCS12_parse: mac verify failure
from (irb):21:in initialize
from (irb):21:in new
from (irb):21
from C:/Ruby192/bin/irb:12:in <main>

+0

问题,你应该为Ruby项目提交一个Bug。如果它得到你,它会得到其他人。除非他们知道,否则Ruby无法修复它。请参阅[Ruby问题跟踪系统](https://bugs.ruby-lang.org/)。 – jww 2015-06-06 22:44:17

File.read("UserCert.p12", "rb") 

问题是红宝石默认读取文件的文本,并需要强制读取文件作为二进制,它解决了基于你的答案

+1

这对我来说不太合适,但是下面做了'File.binread('UserCert.p12')' – jmccure 2015-05-14 09:06:30

+0

它取决于你使用哪个ruby版本,它发生在ruby 1.9.2吗? – 2015-05-19 07:28:51

+0

我使用红宝石2.0.0p353 – jmccure 2015-05-19 12:17:14