擅长:python、mysql、java
<p><code>IOpenSSLTrustRoot</code>是一个有点废话的API。在</p>
<p>它本身不是一个公共接口,所以你不能实现你自己的接口。如果是的话,它没有公共方法,所以不清楚如何定制它的行为。在</p>
<p>考虑到这个接口的安全敏感特性,我敢打赌Twisted会不遗余力地确保你写的任何代码都能继续工作——尽管接口是私有的,接口上只有私有方法。在</p>
<p>如果你写一些依赖于这个接口的代码总是像现在一样工作,那么你可能至少可以在Twisted邮件列表中发表声明,那里的人可能会尽量不破坏你的应用程序。在</p>
<p>也就是说,正如我在上面指出的,这一切都是私人的。Twisted的策略是这里没有向后兼容性的保证。所以你要自己承担风险。在</p>
<p>无论如何,你可以这样写:</p>
<pre><code>from zope.interface import implementer
from characteristic import attributes
from twisted.internet._sslverify import IOpenSSLTrustRoot
@implementer(IOpenSSLTrustRoot)
@attributes(["root_certificate_path"])
class MyCATrustRoot(object):
def _addCACertsToContext(self, context):
context.load_verify_locations(self.root_certificate_path)
</code></pre>
<p>然后使用<code>MyCATrustRoot</code>实例作为<code>trustRoot</code>的<code>BrowserLikePolicyForHTTPS</code>参数。请确保至少使用Twisted 14.0.2,因为早期版本实际上忽略了传递给<code>BrowserLikePolicyForHTTPS</code>的<code>trustRoot</code>。在</p>
<p>例如,如果受信任的“CA”证书位于<code>/foo/ca.pem</code>:</p>
^{pr2}$