我需要编写一个脚本,该脚本通过HTTPS连接到公司内部网络上的许多站点,并验证其SSL证书是否有效;它们尚未过期,是否为正确的地址颁发等等。我们对这些站点使用我们自己的内部公司证书颁发机构,因此我们拥有CA的公钥来验证证书。
默认情况下,Python在使用HTTPS时仅接受并使用SSL证书,因此即使证书无效,诸如urllib2和Twisted之类的Python库也将很乐意使用该证书。
是否有一个好的库可以让我通过HTTPS连接到站点并以这种方式验证其证书?
如何在Python中验证证书?
从版本2.7.9 / 3.4.3开始,Python 默认情况下会 尝试执行证书验证。
这在PEP 467中已提出,值得一读:https :
//www.python.org/dev/peps/pep-0476/
所做的更改会影响所有相关的stdlib模块(urllib / urllib2,http,httplib)。
相关文件:
https://docs.python.org/2/library/httplib.html" target="_blank">html#httplib.HTTPSConnection
现在,此类默认情况下执行所有必要的证书和主机名检查。要恢复为先前未验证的行为,可以将ssl._create_unverified_context()传递给context参数。
https://docs.python.org/3/library/http.client.html#http.client.HTTPSConnection
在版本3.4.3中更改:现在,此类在默认情况下执行所有必要的证书和主机名检查。要恢复为先前未验证的行为,可以将ssl._create_unverified_context()传递给context参数。
请注意,新的内置验证基于 系统提供的 证书数据库。与此相反,请求包附带了自己的证书捆绑包。PEP
476
的“ 信任数据库”
部分
讨论了这两种方法的优缺点。
尽管我保留了verify=false,但在Python中还是出现了ssl错误。你能告诉我如何避免吗?但是curl命令使用-k选项。 错误:
问题内容: 我正在尝试通过调用HTTPS REST API 。在开发过程中,我偶然发现以下错误: 因此,我在Google上搜索了一下,并找到了很多可行的解决方案。 使用Jersey客户端的HTTPS https://gist.github.com/outbounder/1069465 如何解决“ java.security.cert.CertificateException:不存在使用者替代名称”
问题内容: 假设我编写了两个Java应用程序:并且它们被部署并在两个单独的服务器上运行(部署到和部署到),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。 我(Java程序员)如何编码并验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API ?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗? 当我
我正在尝试通过调用HTTPS REST API。在开发过程中,我偶然发现了以下错误: 所以我用谷歌搜索了一下,找到了大量的解决方案,实际上是有效的。 使用泽西客户端的HTTPS https://gist.github.com/outbounder/1069465 如何修复java.security.cert.证书异常:不存在主题替代名称错误? http://www.mkyong.com/webse
我在使用模块urllib(Python 3.6)时遇到了问题。每次使用该模块时,我都会收到相当于一页的错误。 urllib有什么问题以及如何修复? 这段代码喜欢吐出一口东西: 好像模块本身出了问题。
我使用Spring RestTemplate发出HTTPS请求,我想忽略SSL证书 下面是我创建restTem板请求的代码: 当我使用服务器主机名时,此请求有效,但当我使用服务器IP地址时,会出现以下异常:
执行简单代码后: 我有下一个错误: Traceback(最近一次调用最后一次):文件"F:\Run\Lpror\Phyton\lib\site-包\urllib3\connectionpool.py",第597行,在urlopenf中。_prepare_proxy(conn)文件"F:\Run\Lpror\Phyton\lib\site-包\urllib3\connectionpool.py",第
问题内容: 这段代码 给我这个错误 我对SSL几乎一无所知,但我曾尝试下载该站点的证书并使用该选项指向该文件,但是它没有用。我想念什么吗? 问题答案: 正如评论中已经指出的那样:从SSLLabs报告中可以看出,该网站的SSL实施不正确。该报告中有关您的问题的主要部分是: 该服务器的证书链不完整。等级上限为B。 这意味着服务器没有发送验证证书所需的完整证书链。这意味着您需要在验证时自行添加丢失的证书