Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python请求进行HTTPS TSL证书链验证_Python_Security_Ssl_Https_Python Requests - Fatal编程技术网

使用Python请求进行HTTPS TSL证书链验证

使用Python请求进行HTTPS TSL证书链验证,python,security,ssl,https,python-requests,Python,Security,Ssl,Https,Python Requests,我正在使用python 2.7.9运行windows服务。 作为其中的一部分,我正在尝试使用HTTPS连接到服务器。 我使用请求模型(2.7.0)来实现这一点。 我还使用wincertstore(0.2)模型来读取windows证书存储并将其用作CA。 服务器证书按以下顺序使用中间证书签名- 根是“根证书颁发机构-G2” 中间版本是“Go-Daddy安全证书颁发机构-G2” 服务器证书“*.demoserver.com” 我的问题是证书验证失败并出现以下错误-SSLError:[SSL:cert

我正在使用python 2.7.9运行windows服务。 作为其中的一部分,我正在尝试使用HTTPS连接到服务器。 我使用请求模型(2.7.0)来实现这一点。 我还使用wincertstore(0.2)模型来读取windows证书存储并将其用作CA。 服务器证书按以下顺序使用中间证书签名-

根是“根证书颁发机构-G2”

中间版本是“Go-Daddy安全证书颁发机构-G2”

服务器证书“*.demoserver.com”

我的问题是证书验证失败并出现以下错误-SSLError:[SSL:certificate\u VERIFY\u FAILED]certificate VERIFY FAILED(\u 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)
如果我在Chrome\Firefox\IE上打开它,验证就成功了。 我确实注意到了以下行为:

在新的操作系统上,如果我第一次使用浏览器打开服务器,中间证书(“Go Daddy Secure certificate Authority-G2”)将添加到Windows证书存储中,在该用户下,在中间证书颁发机构下。 如果这样,我将从python控制台运行上述代码,验证将起作用,因为证书已添加到windows应用商店。 但是,由于我的代码是作为服务运行的,这意味着使用系统用户和本地计算机存储,证书将不在那里,验证将失败

我的问题是如何让它工作?我如何告诉python检查整个链,我认为它检查服务器证书,只看到一级证书(中间证书),无法识别它并失败,即使根证书也在系统存储中找到

我还尝试使用certifi作为CA,但也失败了

建议“CA.addcerts(…)”应该是“CA.addstore(…)”,来自: