Ami*_*itE 5 python security ssl https python-requests
我正在使用python 2.7.9运行Windows服务.作为其中的一部分,我正在尝试使用HTTPS连接到服务器.我正在使用请求模型(2.7.0)来完成它.我也使用wincertstore(0.2)模型来读取Windows证书库并将其用作CA. 服务器证书使用中间证书按以下顺序烧录 -
Root是"Go Daddy Root Certificate Authority - G2"
中级是"Go Daddy Secure Certificate Authority - G2"
服务器证书"*.demoserver.com"
我的问题是证书验证失败,出现以下错误 - SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:581).
这是我正在使用的代码:
import requests
import wincertstore
ca = wincertstore.CertFile()
ca.addcerts('ROOT')
ca.addcerts('CA')
requests.get('https://server.demoserver.com', verify=ca.name)
Run Code Online (Sandbox Code Playgroud)
如果我在Chrome\Firefox\IE上打开它,验证成功.我注意到以下行为:
在新操作系统上,如果我是第一次使用浏览器打开服务器,则中间证书("Go Daddy安全证书颁发机构 - G2")将被添加到Windows证书存储区,在该用户下,在中级证书颁发机构下.如果那时我将从python控制台运行上面的代码,验证将起作用,因为证书已添加到Windows应用商店.但是,由于我的代码作为服务运行,这意味着使用SYSTEM用户和本地机器商店,证书将不在那里,验证将失败.
我的问题是如何让它发挥作用?我如何告诉python检查整个链,我认为它检查服务器证书,只看到一级(中间证书),不识别它并失败,即使在系统存储中也找到了根证书.
我也试过使用certifi作为CA也失败了
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |