ssl - 带有延迟的扭曲 SNI

标签 ssl twisted sni pyopenssl

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

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

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

有没有办法告诉 Twisted/pyOpenSSL 等到延迟触发?

编辑:我发现这个链接看起来很有希望,但没有提供解决方案:https://mta.openssl.org/pipermail/openssl-dev/2015-January/000480.html

最佳答案

您可以在此处找到 Twisted 和 SNI 的示例:https://pypi.python.org/pypi/txsni .我真的非常希望回调能够接受延迟。我认为做到这一点的方法是暂停底层传输,不再向内或向外传送任何进一步的字节 (stopReading/stopWriting),然后在Deferred 在完成剩余的 SNI 舞蹈之后触发。但是,我什至不确定使用 OpenSSL 这是否可能,因为 SNI 是与 ClientHello 的其余部分一起接收的,您可能需要能够立即使用react提供正确的证书。在这种最坏的可能情况下,您可以将收到的第一个字节 block 输入虚拟内存 BIO,等待 TLS 握手,将其丢弃并且永远不会传递任何生成的响应,并且然后在您决定使用哪个上下文对象之前不要初始化您的“真正的”子传输。

希望这对您有所帮助 - 如果您弄明白了,请为 TxSNI 或 Twisted 贡献一个补丁!

关于ssl - 带有延迟的扭曲 SNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33130069/

相关文章:

python - Pymodbus/Twisted 异步客户端重新连接

jquery - 我正在尝试使用 Twisted 和 jQuery(使用 Django)制作一个长轮询聊天应用程序。如何将查询传递回 JS?

amazon-web-services - AWS NLB 是否在终止 TLS 时传递 SNI 值? (通过 SNI 路由)

nginx - 有没有办法在 Nginx 中启用/设置 ESNI?

python - grequests 与 requests 发生冲突

Python ssl 无法使用 TLS1.2 客户端连接到 TLS1.2 服务器

azure - 如何获取 Azure 应用程序网关 HTTPS 监听器的证书

windows - 在 Windows 服务中实现 syslog 到远程主机

redis - 我如何以扭曲的工厂方法访问redis?

http - HTTPS 代理中的连接、主机和 SNI