首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用urllib.request验证HTTPS证书

使用urllib.request验证HTTPS证书
EN

Stack Overflow用户
提问于 2014-06-24 04:04:55
回答 6查看 10.5K关注 0票数 9

我正在尝试使用Python3的urllib.request模块中的urlopen方法打开https URL。它似乎工作得很好,但是文档警告说“如果没有指定cafilecapath,HTTPS请求将不会对服务器的证书进行任何验证”。

我猜,如果我不希望我的程序容易受到中间人攻击、被吊销的证书问题和其他漏洞的攻击,我需要指定其中一个参数。

cafilecapath应该指向证书列表。我该从哪里得到这份清单呢?是否有什么简单且跨平台的方法可以使用与我的操作系统或浏览器相同的证书列表?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-01-29 03:02:11

我找到了一个能做我想做的事情的库:Certifi。它可以通过从命令行运行pip install certifi来安装。

现在很容易发出请求并验证它们:

代码语言:javascript
复制
import certifi
import urllib.request

urllib.request.urlopen("https://example.com/", cafile=certifi.where())

正如我所料,这将为具有有效证书的站点返回一个HTTPResponse对象,并为具有无效证书的站点引发ssl.CertificateError异常。

票数 5
EN

Stack Overflow用户

发布于 2019-05-16 03:23:32

适用于python 2.7及更高版本

代码语言:javascript
复制
context = ssl.create_default_context(cafile=certifi.where())
req = urllib2.urlopen(urllib2.Request(url, body, headers), context=context)
票数 9
EN

Stack Overflow用户

发布于 2014-06-24 13:09:33

您可以在http://curl.haxx.se/docs/caextract.html下载适用于urllib的格式(例如,PEM格式)的证书Mozilla

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24374400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档