扭曲的howto docs for using Agent over SSL建议使用创建一个 ContextFactory,但是 API docs for t.w.c.Agent显示 contextFactory 参数现在应该是一个实现 t.w.i.IPolicyForHTTPS 的对象。源代码看起来像是包装了旧的 ContextFactories 以实现新接口(interface),但它发出了弃用警告。
如何使用新界面设置 SSL 方法(例如 SSLv3)?
使用旧的 ContextFactory,我可以了解我的代码在哪里可以接收 PyOpenSSL OpenSSL.SSL.Context 并使用该对象设置 SSL 方法。使用新界面时,我不清楚我的代码在哪里可以设置 SSL 方法。
请您参考如下方法:
如果您确实需要设置 SSL 方法(默认为 TLS 1.0 或更高版本),则需要子类化 twisted.web.client.BrowserLikePolicyForHTTPS(未测试):
from OpenSSL import SSL
from twisted.internet import reactor, ssl
from twisted.web import client
class MyPolicy(client.BrowserLikePolicyForHTTPS):
def creatorForNetloc(self, hostname, port):
return ssl.optionsForClientTLS(
hostname.decode("ascii"),
extraCertificateOptions={'method': SSL.SSLv3_METHOD},
trustRoot=self._trustRoot
)
myAgent = client.Agent(reactor, contextFactory=MyPolicy())
