SSL:CERTIFICATE_VERIFY_FAILED证书验证失败

问题描述:

from lxml import html 
import requests 


url = "https://website.com/" 
page = requests.get(url) 
tree = html.fromstring(page.content) 
page.content 

- >SSLError:SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:748)SSL:CERTIFICATE_VERIFY_FAILED证书验证失败

我运行此脚本,但我得到这个错误。我该怎么做?

+0

[可能重复(https://*.com/questions/27835619/urllib-and- ssl-certificate-verify-failed-error)检查这个想法。 – ivan7707

+2

如果你能指出“website.com”是一个真实的URL还是仅仅是一个例子,以及你采取了哪些步骤来确保它的证书是可信的,那么建议会更容易。您可能需要启用一些SSL跟踪。 –

+0

这是一个内部公司网址 – Leo

由于您的网址是“内部公司网址”(如在注释中规定),我猜它采用的是自签名证书,或由发行自签名的CA证书。

如果这是事实的话,你有两个选择:

(1)提供给您的企业CA的路径(包括中间证书的完整链条,如果有的话)requests.get() call via verify说法:

requests.get('https://website.lo', verify='/path/to/certfile') 

(2),完全禁用客户端证书验证(但提防所有的安全风险这需要,是一个简单的人在这方面的中间人攻击,等):

requests.get('https://website.lo', verify=False) 

富勒完整性,相关verify参数在requests.request()文档描述:

verify -- (optional) Either a boolean, in which case it controls whether we verify 
      the server's TLS certificate, or a string, in which case it must be a path 
      to a CA bundle to use. Defaults to True. 
+0

我可以在哪里找到我的certfile? – Leo

+0

'请求'在默认情况下[尝试使用'certifi'包](http://docs.python-requests.org/en/master/user/advanced/#ca-certificates),但如果您询问有关CA证明你的企业内部服务器,最好的方法是让你的网络管理员为你提供他们的证书。 – randomir

使用下面的代码,而SSL

from lxml import html 
import requests 


url = "http://website.com/" 
page = requests.get(url) 
tree = html.fromstring(page.content) 
page.content 
+0

NSA会喜欢你的解决方案! – rweisse