Python 请求无法使用(转换的)客户端证书获得成功响应



我正在尝试访问一个端点,这需要一个客户端证书。 我从.p12开始,我能够快速导入谷歌浏览器,并且可以成功访问端点。因此,客户端证书和终结点是兼容的。

但是,我正在努力让 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"。(和 HTTP 响应 403)

我的PEM文件包含三组-----BEGIN CERTIFICATE-----,然后-----BEGIN PRIVATE KEY-----。 所有 4 个 BEGIN 前面都有包属性 - 删除这些行不会有什么区别。

我正在使用 Ubuntu VM 进行密钥创建,但从 Windows 机器运行 Python - 不确定这是否有区别。

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

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

如果您的客户端证书有问题,文档建议您的错误将以"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 向网络服务器发出请求时可能使用了未显示的尾随"/"。尝试在地址末尾添加/。

当然,您不应该使用示例中所示的"<">"标签。

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

相关内容

  • 没有找到相关文章

最新更新