三重握手问题最近被披露。禁用会话恢复是否会减轻这种情况,是另一个问题的主题。让我们假设我想出于任何原因禁用它(基本上是我的偏执狂)。
要在 C 中禁用它,似乎应该使用这个:
SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
有人可以确认一下吗?
但是如何在 pyopenssl 中做到这一点?
从 pyOpenSSL 0.14 开始,这是可能的:
from OpenSSL.SSL import TLSv1_2_METHOD SESS_CACHE_OFF, Context, Connection
ctx = Context(TLSv1_2_METHOD)
ctx.set_session_cache_mode(SESS_CACHE_OFF)
conn = Connection(ctx, ...)
pyOpenSSL 的早期版本不公开这些 API。
如果您还需要关闭会话票证,则:
from OpenSSL.SSL import OP_NO_TICKET
...
ctx.set_options(OP_NO_TICKET)
有人可以确认一下吗?
我相信 Henson 博士在OpenSSL 用户邮件列表中回答了这个问题。
https://secure-resumption.com/中描述的攻击也破坏了 tls 通道绑定 tls-unique RFC 5929。
我仍然想使用 tls-unique 进行 SCRAM (RFC 5802) 中定义的通道绑定。如果会话缓存被禁用,OpenSSL 是否可以用于通道绑定并防止这种攻击?
SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF)
是否有必要使用其他功能禁用恢复?
您还需要禁用会话票证。
请注意,攻击的初始阶段要求攻击者拥有客户端信任的私钥和证书。我很想知道在您的情况下会发生这种情况。
因此,根据 Henson 博士的说法,您还需要SSL_CTX_set_options
使用SSL_OP_NO_TICKET
.
请参阅SSL_CTX_set_options(3)上的 OpenSSL 文档。
不过,我不知道如何在 Python 中做到这一点。