qre*_*0ct 4 https openssl python-2.7 python-requests
情况: 目标站点(例如pre-prod URL,例如https://my-pre-prod-site.com/login)正在使用自签名证书。从浏览器可以通过https访问该站点,而不会出现任何问题(通过将证书添加到浏览器的信任库中来抑制自签名证书警告)
问题陈述: 一个简单的python脚本使用请求对目标站点进行get调用会失败,并在不同情况下出现以下任一错误:
requests.exceptions.SSLError:[Errno 0] _ssl.c:344:错误:00000000:lib(0):func(0):原因(0)
要么
request.exceptions.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:590)(在python提示符下)使用的简单脚本为:
import requests
res = requests.get('https://my-pre-prod-site.com/login')
Run Code Online (Sandbox Code Playgroud)
**已经尝试过的东西**
res = requests.get('https://my-pre-prod-site.com/login', verify = os.path.join(os.getcwd(),'test.pem') 其中,test.pem是通过按以下顺序连接以下命令的输出而创建的pem文件:
openssl rsa-在〜/ Desktop / CertPath / private.key -check中
和
openssl x509 -pubkey -noout -in〜/桌面/CertPath/certificate.pem
该脚本是从〜/ Desktop / CertPath运行的,因此getcwd()提供了证书的正确路径。
环境详细信息是否有帮助
操作系统-ElCapitan Mac
请求-2.9.0
Python-
Python使用的2.7.10 OpenSSL -'OpenSSL 0.9.8zg 2015年7月14日'
注意-openssl版本似乎不是问题。因为即使使用了opensl的更新版本,错误也是相同的-在Ubuntu上使用Openssl 1.x的Python 2.6进行了测试
小智 5
这个问题很旧,但是如果有人在这里想知道的话。
您正在将私钥和公钥放入test.pem。错了 验证参数所需的是它可以信任的证书。
res = requests.get('https://my-pre-prod-site.com/login', verify = os.path.join(os.getcwd(),'test.pem')
Run Code Online (Sandbox Code Playgroud)
test.pem应该包含所有受信任证书的列表。但是,您在test.pem中提供的是您的公钥和私钥。您在〜/ Desktop / CertPath / certificate.pem文件本身应该放入其中。
尝试这个:
res = requests.get('https://my-pre-prod-site.com/login', verify = '~/Desktop/CertPath/certificate.pem')
Run Code Online (Sandbox Code Playgroud)
mpr*_*net -1
为了指定 SSL 验证的证书,您可以使用:
requests.get('https://my-pre-prod-site.com/login', cert=os.path.join(os.getcwd(),'test.pem'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3889 次 |
| 最近记录: |