【问题标题】:pycurl.error: (35, 'error reading X.509 key or certificate file')pycurl.error: (35, '读取 X.509 密钥或证书文件时出错')
【发布时间】:2014-12-30 13:57:44
【问题描述】:

下面的代码在 Windows 上运行,但在 Ubuntu 上我收到错误(35,'读取 X.509 密钥或证书文件时出错')。好像pycurl找不到证书文件的路径:

    c.setopt(c.URL, self.INTERFACE_URL)
    c.setopt(c.POST, True)
    c.setopt(c.HTTPHEADER, ["Content-Type: text/xml"])
    c.setopt(c.HTTPAUTH, c.HTTPAUTH_BASIC)
    c.setopt(c.USERPWD, self.AUTHORIZATION_PASS)
    c.setopt(c.POSTFIELDS, body)
    c.setopt(c.SSL_VERIFYPEER, True)
    c.setopt(c.SSLVERSION, 3)
    c.setopt(c.CAINFO, "geotrust.pem");
    c.setopt(c.VERBOSE, True)
    c.setopt(c.SSL_VERIFYHOST, 2)
    c.setopt(c.SSLCERT, "WS*******._.1.pem")
    c.setopt(c.SSLKEY, "WS*******._.1.key")
    c.setopt(c.SSLKEYPASSWD, "**********")
    c.setopt(c.WRITEFUNCTION, response.write)
    c.perform()
    c.close()

我找到了一种没有帮助的可能解决方案:

“Pycurl 似乎同时将 CAINFO 和 CAPATH 设置为其默认值,这可能会导致一些混乱。我设置我的消费者使用 CAPATH,并且必须调用 c.unsetopt(pycurl.CAINFO) 才能让事情工作正常。我忘记了在你发送这封电子邮件之前我会遇到这个困难。 另一种可能性是 pycurl 找不到证书 您已在参数中提供给 CAINFO。您可以尝试提供一个 代替 CAINFO 的参数的完整路径。”

有什么想法吗?

【问题讨论】:

    标签: python curl pycurl


    【解决方案1】:

    根本原因是,对于 debian、ubuntu、rasbian,pycurl 的内容绑定到 gnutls 而不是 openssl 或 windows/mac os 加密 API。 使用gnutls 时,*passwd 参数似乎被默默地忽略了。所以不支持受保护的密钥文件。

    如果您构建绑定到opensslpycurl,它就可以工作。如何使用 debian/ubuntu 进行操作,您会发现 here

    我还为 pycurl 提交了bug。您可能想订阅此错误。

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 2021-03-23
      • 2015-05-16
      相关资源
      最近更新 更多