Python 请求无法通过(已转换的)客户端证书获得成功响应
Python Requests fails to get successful response with (converted) client cert
我正在尝试访问需要客户端证书的端点。
我从 .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)
returns 您无权访问此服务器上的 "http"。(以及 403 的 HTTP 响应)
我的 PEM 文件包含三组 -----BEGIN CERTIFICATE-----
,然后是 -----BEGIN PRIVATE KEY-----
。
所有 4 个 BEGIN 都以 Bag Attributes 开头——删除这些行没有什么不同。
我正在使用 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 向 Web 服务器发出请求时,可能使用了未显示的尾随“/”。尝试在地址末尾添加 /。
当然,您不应该使用示例中显示的“<”“>”标签。
我发现 https://gist.github.com/erikbern/756b1d8df2d1487497d29b90e81f8068,按照这些评论中的建议使用 delete=False
参数,并且 pyOpenSSL 现在可以工作了。
我正在尝试访问需要客户端证书的端点。 我从 .p12 开始,我能够快速导入到 Google Chrome,并且可以成功访问端点。所以客户端证书和端点是兼容的。
但是,我正在努力让 Python 请求模块(使用 Python 2.7)成功访问相同的端点。
我的步骤是:
openssl pkcs12 -in my.p12 -out certificate.pem –nodes
提示我输入密码,然后创建 certificate.pemprint(requests.get("<https://endpoint>", cert="certificate.pem").content)
returns 您无权访问此服务器上的 "http"。(以及 403 的 HTTP 响应)
我的 PEM 文件包含三组 -----BEGIN CERTIFICATE-----
,然后是 -----BEGIN PRIVATE KEY-----
。
所有 4 个 BEGIN 都以 Bag Attributes 开头——删除这些行没有什么不同。
我正在使用 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 向 Web 服务器发出请求时,可能使用了未显示的尾随“/”。尝试在地址末尾添加 /。
当然,您不应该使用示例中显示的“<”“>”标签。
我发现 https://gist.github.com/erikbern/756b1d8df2d1487497d29b90e81f8068,按照这些评论中的建议使用 delete=False
参数,并且 pyOpenSSL 现在可以工作了。