Python请求模块中的SSL证书错误,但VBA中没有

时间:2018-07-04 14:56:39

标签: python vba http ssl python-requests

我正尝试向公司的Intranet页面发送请求,如下所示:

import requests

http_proxy  = 'some_proxy1'
https_proxy = 'some_proxy2'
URL = 'some_url'


proxyDict = { 
              "http"  : some_proxy1, 
              "https" : some_proxy2
            }

response = requests.get(some_url, proxies=proxyDict, verify=False)

即使verify设置为False,我也会得到

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_read_bytes', 'sslv3 alert bad certificate')],)",)

该代码可用于外部页面。

奇怪的是,我通过VBA尝试了相同的请求(但没有代理),并且有效:

Sub request()

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "some_url"
objHTTP.Open "GET", URL, False
objHTTP.send
Debug.Print objHTTP.responseText

end sub

我可以做些什么使Python代码正常工作吗?

为什么VBA的SSL证书没有问题?是因为它以某种方式事先知道-因为它是Windows固有的-不需要验证?

1 个答案:

答案 0 :(得分:1)

  

SSLError :(“错误的握手:错误([['SSL例程”,“ ssl3_read_bytes”,“ sslv3警报错误证书”),)“)

这可能意味着服务器希望您使用客户端证书进行身份验证。我的猜测是,特定的证书位于Windows证书存储区中,并且将由您的VB脚本自动使用,与浏览器自动使用的相同。仅Python不使用Windows证书存储。这意味着您需要以某种方式从商店中提取特定证书,并将其明确用作Python程序as documented中的客户端证书。