2017-08-03 223 views
3

我试图访问已过期/无效证书的网页。当我从浏览器访问URL时,我收到安全警告Your connection is not private。但是当我使用python访问相同的页面时,我没有收到任何错误。我使用的代码如下,SSL证书验证Urllib2

import urllib2 
url = 'https://expired.badssl.com/' 
request = urllib2.Request(url) 
result = urllib2.urlopen(request)  
print (result.read()) 

为什么我在urllib2中没有收到SSL证书错误?

UPDATE

我确定了被下载的页面是我的网络认证页面。

但是,当我使用requests我得到SSL异常。为什么urllib2的行为与请求行为有所不同?

回答

0

Python之前2.7.9还没有验证证书。

Python 2.7.9包含许多网络安全增强功能,已被批准包含在Python 2.7维护版本中。 PEP 476将几个标准库模块(如httplib,urllib2和xmlrpclib)更改为默认验证服务器通过安全(TLS)连接提供的证书。

来自2.7.14安装说明。

另见

+0

它这是真的,该文件指出Python 2.7.9+中的urllib2默认验证证书。然而,在Python 2.7.13中,我执行了'urllib2.urlopen(urllib2.Request(“https:// [编辑] /”))''和'requests.get(“https:// [编辑] /”)' ,似乎请求给出了一个SSL异常,而urllib2没有!看来文档是错误的! – cowlinator