现状: 目标网站(一个PROD预网址,说https://my-pre-prod-site.com/login,例如)使用自签名证书。 从浏览器,该网站是没有任何问题的,在蟒蛇请求使用自签名证书
问题说明(自签名证书的警告是通过在浏览器中的证书信任存储抑制)通过HTTPS访问: 一个简单的Python脚本使得get调用使用请求目标站点失败,或者在不同的情况下,以下错误:
requests.exceptions.SSLError: [Errno 0] _ssl.c:344: error:00000000:lib(0):func(0):reason(0)
或
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) The simple script used (on the python prompt) is :
import requests
res = requests.get('https://my-pre-prod-site.com/login')
**的东西已经尝试过**
- 我做不想跳过SSL验证。因此,verify = false不适合我。
- 我已经使用以下具有相同的错误
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()会为证书提供正确的路径。
- 我试过另一个test.pem文件,以及连接顺序颠倒的地方。它仍然会抛出同样的错误。
- 已尝试传递持有公钥的.pem文件和持有私钥的.key文件,分别(单独)以及与结果相同的错误。
环境的详细信息,如果有帮助
OS - ElCapitan苹果
要求 - 2.9.0
Python的 - 2.7.10
正在使用Python的 OpenSSL的 - “OpenSSL的0.9.8zg 7月14日2015'
注 - openssl版本似乎不成问题。因为即使使用OpenSSL的更新版本,这些错误都是一样的 - 与Python 2.6在Ubuntu 测试了使用OpenSSL 1.x的
作为一种变通方法,也许你可以使用我们的加密?你的开发配置将更接近你的产品。 – Tom