【问题标题】:Client certificate problems with Net::HTTP (Neither PUB key nor PRIV key:: nested asn1 error)Net::HTTP 的客户端证书问题(PUB key 和 PRIV key:: nested asn1 错误)
【发布时间】:2013-02-28 10:35:20
【问题描述】:

我正在使用 Cucumber 测试系统,其中一部分涉及使用 SSL 客户端证书在远程 .NET 服务器上进行身份验证。此 .NET 系统的开发人员以 .pem 文件的形式向我提供了此证书,如下所示:

    -----BEGIN CERTIFICATE-----
    MIIFzTCCBLWgAwIBAgIKHNfvKAAAAAAAFDANBgkqhkiG9w0BAQUFADBKMRMwEQYK
    ...more lines...
    aaG0c6enKQJiVcA4myLkBkN/wxiZsnBy/zGdj+u4RurxcS717FKm7oYY3JsuRSRH
    Ow==
    -----END CERTIFICATE-----

我用来连接的代码如下所示(取自http://www.rubyinside.com/nethttp-cheat-sheet-2940.html):

    uri = URI.parse("https://secure.com/")
    pem = File.read("/path/to/my.pem")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.cert = OpenSSL::X509::Certificate.new(pem)
    http.key = OpenSSL::PKey::RSA.new(pem)
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE

    request = Net::HTTP::Get.new(uri.request_uri)

但是,'http.key = OpenSSL::PKey::RSA.new(pem)' 行会引发以下异常:

    Neither PUB key nor PRIV key:: nested asn1 error (OpenSSL::PKey::RSAError)

我最初是使用 HTTParty 发出请求,但遇到了同样的问题,我在 HTTParty 本身的同一行中追踪到了基本相同的行。

看来我得到的这个证书可以很高兴地传递给 OpenSSL::X509::Certificate.new 以创建证书对象,但它不能用于创建 OpenSSL::PKey 的实例: :RSA。我尝试删除设置密钥的行,但随后身份验证失败。有可能这实际上是我应该做的,并且由于某些其他原因身份验证失败,但在我开始挖掘其他地方的问题之前,我需要更清楚地了解这里发生了什么。

来自这个 SO 问题:What causes "Neither PUB key nor PRIV key:: nested asn1 error" when building a public key in ruby? ...看起来好像私钥应该以某种方式包含在 pem 文件中,但 .NET 开发人员似乎认为这没有必要。

要让 .NET 开发人员清楚地了解他们的身份验证工作原理是很困难的,而且我似乎也无法在网上找到明确的信息。任何人都可以对此有所了解吗?

【问题讨论】:

    标签: ruby https openssl client-certificates net-http


    【解决方案1】:

    好吧,在发布这篇文章后的 34 分钟内,我已经弄清楚了。

    我使用的 pem 文件也应该包含一个私钥。我从 .NET 人员那里获得了一个受密码保护的 .pfx 文件,并生成了我自己的 pem,如下所示:

    openssl pkcs12 -in cert.pfx -out cert.pem -nodes
    

    此文件包含证书和私钥,现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2013-05-09
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      相关资源
      最近更新 更多