【问题标题】:Python Requests fails to get successful response with (converted) client certPython 请求无法通过(转换后的)客户端证书获得成功响应
【发布时间】:2018-09-19 02:02:22
【问题描述】:

我正在尝试访问需要客户端证书的端点。 我从 .p12 开始,我可以快速导入到 Google Chrome,并且可以成功访问端点。所以客户端证书和端​​点是兼容的。

但是,我很难让 Python 请求模块(使用 Python 2.7)成功访问相同的端点。

我的步骤是:

  • openssl pkcs12 -in my.p12 -out certificate.pem –nodes 提示我输入密码,然后创建 certificate.pem
  • print(requests.get("<https://endpoint>", cert="certificate.pem").content) 返回您无权访问此服务器上的“http”。(以及 403 的 HTTP 响应)

我的 PEM 文件包含三组 -----BEGIN CERTIFICATE-----,然后是 -----BEGIN PRIVATE KEY-----。 所有 4 个 BEGIN 都以 Bag Attributes 开头 - 删除这些行没有任何区别。

我正在使用 Ubuntu 虚拟机创建密钥,但在 Windows 机器上运行 Python - 不确定这是否会有所不同。

我欢迎任何想法;特别是要了解问题是否与转换为 PEM 相关,或者是否与请求调用有关。

【问题讨论】:

  • 我已经尝试过这种方法(它似乎只是拆分了私钥):github.com/requests/requests/issues/1573#issuecomment-188125157 我也尝试过这个示例:gist.github.com/erikbern/756b1d8df2d1487497d29b90e81f8068 这两种方法仍然给出相同的 HTTP 403 响应.
  • 您可以尝试使用此命令openssl pkcs12 -in my.p12 -clcerts -nokeys -out publicCert.pem 并使用publicCert.pem 看看是否有帮助。
  • 感谢贡献@TarunLalwani - 不幸的是,这在 Python 中给出了一个错误:OpenSSL.SSL.Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]
  • 您可以尝试在命令中添加-outform PEM 吗?导出文件的开头应该有----- START CE....,应该是一个文本文件,应该是一个证书
  • Ubuntu 和 Windows 上的 OpenSSL 似乎不接受 outform 参数。我的导出包括“包属性”; -----BEGIN CERTIFICATE----- 是第 5 行。删除前 4 行没有区别。

标签: python-requests client-certificates pem pkcs#12 p12


【解决方案1】:

该错误并不表示客户端证书有问题。

如果您的客户端证书是问题,文档建议您的错误将以“SSLError”为前缀:http://docs.python-requests.org/en/master/user/advanced/#client-side-certificates

相关错误可能出现在您出于隐私原因而审查的部分中。获得身份验证后,Web 服务器因其他原因拒绝您的请求。

您可能正在致电requests.get('https://website.com', ...

您可能需要致电requests.get('https://website.com/', ...

或者直接请求网站内的文件资源。在使用 Chrome 进行测试时,当 Chrome 向 Web 服务器发出请求时,可能使用了未显示的尾随“/”。尝试在地址末尾添加 /。

当然,您不应该使用示例中显示的““标签。

【讨论】:

【解决方案2】:

我找到了https://gist.github.com/erikbern/756b1d8df2d1487497d29b90e81f8068,带有这些 cmets 中建议的 delete=False 参数,并且 pyOpenSSL 现在可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2015-02-26
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多