客户端证书问题与Net::HTTP(既没有PUB密钥也没有PRIV密钥::嵌套asn1错误)



我正在使用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. xml"这行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问题:什么原因导致"既不是PUB密钥也不是PRIV密钥::嵌套asn1错误"在ruby中构建公钥时?…看起来好像私钥应该以某种方式包含在pem文件中,但. net开发人员似乎认为这是不必要的。

让。net开发人员清楚地知道他们的身份验证是如何工作的是很困难的,而且我似乎也找不到网上清晰的信息。有人能解释一下吗?

在发布这篇文章后的34分钟内,我已经弄明白了。

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

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

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

最新更新