可替代`urllib2.urlopen`并进行证书验证的实现
我在用Python的 urllib2.urlopen
和HTTPS服务器进行通信,但我最近在文档上看到,"使用 urllib2.urlopen
的HTTPS请求并不会验证服务器的证书。"
这对我来说是个大问题,因为这让我的服务器容易受到中间人攻击。
我想要一个可以直接替代 urllib2.urlopen
的方法,能够进行证书验证,这样我就可以把它和我的代码打包在一起,把所有对 urllib2.urlopen
的调用替换成调用这个修改过的 urlopen
函数。
因为这是个安全问题,我更倾向于使用经过严格测试和审计的安全代码,而不是网上随便找的解决方案。
3 个回答
1
你可能会对这个库感兴趣,虽然它不能直接替代你现在用的东西。这个库会根据你使用的Python版本,使用ssl
或者OpenSSL
,还有httplib
。
1
你可以看看这个网站:http://pycurl.sourceforge.net/。它使用的是libcurl,这个库非常成熟,经过了很多测试。
不过,它并不是一个可以直接替换的工具,因为它的接口(api)和其他的工具不一样。
补充说明 更好的是,看看@Sven在评论中提到的问题链接(里面也提到了pycurl作为一个选项)。
2
情况发生了变化,幸运的是。从Python 2.7.9和3.4.3版本开始,证书验证默认是开启的。想了解更多细节,可以查看这个链接:https://www.python.org/dev/peps/pep-0476/。