进行证书验证的“urllib2.urlopen”的直接替代品
我使用 Python 的 urllib2.urlopen
与 HTTPS 服务器通信,但我现在在 文档 中了解到“HTTPS请求 [使用 urllib2.urlopen
] 不会对服务器的证书进行任何验证。”
这对我来说是一个大问题,因为它使我的服务器容易受到 MITM 攻击。
我想要一个可以进行证书验证的 urllib2.urlopen
的直接替代品,这样我就可以将它与我的代码捆绑在一起,并将对 urllib2.urlopen
的所有调用替换为对修改后的 urlopen 函数。
因为这是一个安全问题,所以我更喜欢经过实战测试的安全审核代码,而不是来自互联网的一些随机配方。
I use Python's urllib2.urlopen
for talking with HTTPS servers, but I now learned on the documentation that "HTTPS requests [using urllib2.urlopen
] do not do any verification of the server’s certificate."
This is a big problem for me, because it leaves my servers open to a MITM attack.
I want a drop-in replacement for urllib2.urlopen
that does cert-verification, so I could bundle it with my code and replace all calls to urllib2.urlopen
with calls to the modified urlopen
function.
Because this is a security issue, I much prefer battle-tested security-audited code rather than some random recipe from the internet.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
幸运的是,情况发生了变化。从 Python 2.7.9 / 3.4.3 开始,默认启用证书验证。请参阅https://www.python.org/dev/peps/pep-0476/< /a> 了解更多详情。
The situation changed, fortunately. Certificate verification is by default enabled from Python 2.7.9 / 3.4.3 on. See https://www.python.org/dev/peps/pep-0476/ for further details.
看看http://pycurl.sourceforge.net/。它使用 libcurl,它确实很成熟并且经过了良好的测试。
但它并不是“直接”的替代品。 api不一样。
编辑 更好的是,看看@Sven 在他的评论中链接的问题(这也建议使用 pycurl 作为一个选项)。
Have a look at http://pycurl.sourceforge.net/. It uses libcurl which is certainly mature and well tested.
It isn't a "drop in" replacement though. The api is different.
Edit better still, look at the question linked to by @Sven in his comment (which also suggests pycurl as an option).
您可能对此库感兴趣,尽管它不是直接替代品。它使用
ssl
或OpenSSL
(具体取决于您使用的 Python 版本)和httplib
。You might be interested in this library, although it's not a drop-in replacement. It uses
ssl
orOpenSSL
, depending on the version of Python you're using, andhttplib
.