Python Twisted如何使用新的IPolicyForHTTPS为twisted.web.client.Agent设置SSL方法?

时间:2014-10-03 13:50:55

标签: python ssl https twisted

Twisted howto docs for using Agent over SSL建议使用创建ContextFactory,但API docs for t.w.c.Agent显示contextFactory参数现在应该是实现t.w.i.IPolicyForHTTPS的对象。源代码看起来像包装旧的ContextFactories来实现新接口,但它会发出弃用警告。

如何使用新界面设置SSL方法(例如SSLv3)?

使用旧的ContextFactory,我可以理解我的代码可以接收PyOpenSSL OpenSSL.SSL.Context的位置,并使用该对象设置SSL方法。使用新界面,我不清楚我的代码可以在哪里设置SSL方法。

1 个答案:

答案 0 :(得分:1)

如果您确实需要设置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())