2012-04-18 125 views
5
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

回答

6
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

相關問題