【问题标题】:using self-signed certificates with requests in python在 python 中使用带有请求的自签名证书
【发布时间】:2016-04-18 11:22:56
【问题描述】:

情况: 目标站点(例如,预生产 URL,例如 https://my-pre-prod-site.com/login)正在使用自签名证书。 从浏览器中,可以通过 https 毫无问题地访问该站点(通过将证书添加到浏览器中的信任库来抑制自签名证书警告)

问题陈述: 使用请求对目标站点进行 get 调用的简单 python 脚本在不同情况下会失败,并出现以下错误:

requests.exceptions.SSLError: [Errno 0] _ssl.c:344: error:00000000:lib(0):func(0):reason(0)

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:590) 使用的简单脚本(在 python 提示符下)是:

import requests
res = requests.get('https://my-pre-prod-site.com/login')

**已经尝试过的东西**

  1. 我确实想跳过 ssl 验证。因此,verify = false 对我来说不是一个选项。
  2. 我已经使用了以下相同的错误

res = requests.get('https://my-pre-prod-site.com/login', verify = os.path.join(os.getcwd(),'test.pem') 其中 test.pem 是通过按顺序连接以下命令的输出创建的 pem 文件:

openssl rsa -in ~/Desktop/CertPath/private.key -check

openssl x509 -pubkey -noout -in ~/Desktop/CertPath/certificate.pem

脚本从 ~/Desktop/CertPath 运行,因此 getcwd() 提供了证书的正确路径。

  1. 我还尝试了另一个 test.pem 文件,其中串联顺序颠倒了。它仍然会引发相同的错误。
  2. 已尝试分别(单独)传递保存公钥的 .pem 文件和保存私钥的 .key 文件,但错误与结果相同。

环境详情(如果有帮助)

操作系统 - ElCapitan Mac
请求 - 2.9.0
Python - 2.7.10
Python 正在使用 OpenSSL - 'OpenSSL 0.9.8zg 2015 年 7 月 14 日'

注意 - openssl 版本似乎不是问题。因为即使使用更新版本的 openssl,错误也是相同的 - 在 Ubuntu 上测试 使用 Openssl 1.x 的 Python 2.6

【问题讨论】:

  • 作为一种解决方法,也许您可​​以使用 Let's Encrypt?并且您的开发配置将更接近您的产品。

标签: python-2.7 https openssl python-requests


【解决方案1】:

为了specify certificate for SSL verification你可以使用:

requests.get('https://my-pre-prod-site.com/login', cert=os.path.join(os.getcwd(),'test.pem'))

【讨论】:

  • 已经尝试过了。不工作。同样的错误仍然存​​在。
【解决方案2】:

这个问题很老了,但万一有人在这里想知道。

您将私钥和公钥放入您的 test.pem。这是错误的。验证参数需要的是它可以信任的证书。

res = requests.get('https://my-pre-prod-site.com/login', verify = os.path.join(os.getcwd(),'test.pem')

test.pem 应该包含所有受信任证书的列表。但是您在 test.pem 中提供的是您的公钥和私钥。你 ~/Desktop/CertPath/certificate.pem 文件本身应该进入它。

试试这个:

res = requests.get('https://my-pre-prod-site.com/login', verify = '~/Desktop/CertPath/certificate.pem')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多