[英]Disable SSL certificate check Twisted Agents
我正在使用 Twisted (16.3) 和 Treq (15.1) 在 Python (2.7) 中发出异步请求。
我在处理某些通过 HTTPS 的请求时遇到问题。
某些网站的证书无效,因此在向他们提出请求时,我得到以下信息:
twisted.python.failure.Failure OpenSSL.SSL.Error
我希望我的客户信任任何服务器,包括那些没有证书或有自签名证书的服务器。
如何在我的客户端上禁用证书检查?
这是一个与我基本相同的问题: https : //stackoverflow.com/questions/34357439/ssl-options-for-twisted-agents
谢谢!
这是为treq
制作域白名单的简单方法
from treq.client import HTTPClient
from twisted.web.iweb import IPolicyForHTTPS
from twisted.web.client import BrowserLikePolicyForHTTPS, Agent
from twisted.internet.ssl import CertificateOptions
from twisted.internet import task, defer, ssl
from zope.interface import implementer
@implementer(IPolicyForHTTPS)
class WhitelistContextFactory(object):
def __init__(self, good_domains=None):
"""
:param good_domains: List of domains. The URLs must be in bytes
"""
if not good_domains:
self.good_domains = []
else:
self.good_domains = good_domains
# by default, handle requests like a browser would
self.default_policy = BrowserLikePolicyForHTTPS()
def creatorForNetloc(self, hostname, port):
# check if the hostname is in the the whitelist, otherwise return the default policy
if hostname in self.good_domains:
return ssl.CertificateOptions(verify=False)
return self.default_policy.creatorForNetloc(hostname, port)
@task.react
@defer.inlineCallbacks
def main(reactor):
# make a custom client, agent, and context factory
# NOTE: WhitelistContextFactory() takes a list of BYTES
treq = HTTPClient(Agent(reactor, contextFactory=WhitelistContextFactory([b'example.net'])))
response = yield treq.get('https://example.net/version')
content = yield response.content()
print(content)
WhitelistContextFactory
获取 URL list
(以bytes
)并检查hostname
是否在列表中以忽略 TLS 验证。 您也可以花哨并使用正则表达式。 感谢https://github.com/twisted/treq/issues/213
在过去的几天里,我也一直在尝试这样做。 通过我为规避证书验证所做的所有努力,我可以轻松地创建一对密钥并继续我的快乐:D。 我在treq
问题的treq
问题板上发现了这个评论:
from twisted.internet import _sslverify _sslverify.platformTrust = lambda : None
我确信有一种“正确”的方法可以做到这一点,但在我看来这不值得付出努力。 我做了一个补丁,这样它就不会覆盖 platformTrust()
,我会尝试合并它,但我不会屏住呼吸。从我看到的一些关于信任根、ssl 和证书的错误评论的语气来看,我认为它们不会被合并。 希望这有帮助。
如果您想完全忽略 SSL 检查,这里有一个解决方法:
from twisted.internet import ssl, _sslverify
from twisted.web.iweb import IPolicyForHTTPS
@implementer(IPolicyForHTTPS)
class IgnoreHTTPS:
def creatorForNetloc(self, hostname, port):
options = ssl.CertificateOptions(verify=False)
return _sslverify.ClientTLSOptions(hostname.decode('ascii'), options.getContext())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.