扭曲的SNI与延迟

时间:2015-10-14 15:55:24

标签: ssl twisted sni pyopenssl

在我们的系统中,虚拟主机配置存储在redis中。在连接设置期间,当收到SNI时,我们想查询redis以获取用于TLS连接的正确证书和密钥对,并创建一个新的Context实例,并附上该实例。

大部分代码与此处接受的答案类似:Twisted listenSSL virtualhosts

我们面临的问题是,由于访问证书涉及额外的网络操作,我们希望set_tlsext_servername_callback函数返回延迟。

有没有办法让Twisted / pyOpenSSL等到延迟发射?

编辑:我发现此链接似乎很有希望,但未能提供解决方案:https://mta.openssl.org/pipermail/openssl-dev/2015-January/000480.html

1 个答案:

答案 0 :(得分:1)

您可以在此处找到Twisted和SNI的示例:https://pypi.python.org/pypi/txsni。我真的非常希望能够采取延期的回调。我认为这样做的方法是暂停底层传输进出任何进一步的字节(stopReading / stopWriting),然后在{在完成剩余的SNI舞蹈后,{1}}开火了。但是,我甚至不确定这是否可能使用OpenSSL,因为SNI是与Deferred的其余部分一起收到的,您可能需要能够立即做出反应以提供正确的服务证书。在这种最糟糕的情况下,您可以将收到的第一个字节块送入虚拟内存BIO,等待TLS握手,扔掉它并且永远不会传递任何生成的响应,并且然后在决定使用哪个上下文对象之前,不要初始化“真正的”子传输。

希望这会有所帮助 - 如果您弄明白,请为TxSNI或Twisted提供补丁!

相关问题