2012-01-04 51 views
6

我试图从IRB做一个简单的 OpenSSL::X509::Certificate.new(File.read("testuser.p12"))红宝石1.8.7(或1.9.2),对于相同的结果。我得到的错误是OpenSSL::X509::CertificateError: nested asn1 error红宝石读取文件错误使用OpenSSL

这是一个红宝石问题,或者这是否表明证书本身是畸形?我发现一些类似的报告围绕着证明这种错误的亚马逊证书展开,结果证明它本身就是证书。它在浏览器中工作。如何解决这个问题的建议?

回答

10

根据后缀,“testuser.p12”似乎是一个PKCS#12文件。读取PKCS#12格式为X.509证书格式会导致ASN.1解码错误。您可以改为OpenSSL::PKCS12.new(File.read("testuser.p12"))。如果文件是用密码保护(这是正常的),给密码为PKCS12.new像OpenSSL::PKCS12.new(File.read("testuser.p12"), "pass")

您可以提取证书和CA证书由PKCS12#certificatePKCS12#ca_certs方法的第二个参数。

p12 = OpenSSL::PKCS12.new(File.read("testuser.p12"), "pass") 
p p12.certificate 
p p12.ca_certs 
+0

谢谢!这似乎是问题所在。我没有必要处理很多证书,而我正在关注一个显然不好的例子。您的帖子和[这一个](http://stackoverflow.com/questions/8167579/connect-to-web-server-via-phonegap-with-ssl-and-certificate)极大地帮助 – yodafan86 2012-01-05 01:50:09

+0

更新:它一直工作停下来,我无法弄清楚为什么。它真的会在试验运行之间爆发,现在甚至在irb中,p12 = OpenSSL线声称它需要4个参数?是否需要'net/https'来改变一些依赖性?我还需要其他2个参数?任何帮助非常感谢,这一个让我感到困惑! – yodafan86 2012-03-11 21:31:27

+0

你能解决吗? – shailesh 2013-10-13 13:20:25