如何在pyOpenSSL中禁用会话恢复?

时间:2014-03-13 12:19:00

标签: ssl openssl pyopenssl

最近披露了Tripple Handshake Issue。更糟糕的禁用会话恢复将缓解此问题,是another question的主题。让我们假设我想因任何原因(基本上是我的偏执狂)禁用它。

要在C中禁用此功能,似乎应该使用此功能:

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);

有人可以确认吗?

但是如何在pyopenssl中做到这一点?

2 个答案:

答案 0 :(得分:3)

从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)

答案 1 :(得分:0)

  

有人可以确认吗?

我相信Henson博士在OpenSSL User Mailing list回答了这个问题。

  
    

https://secure-resumption.com/中描述的攻击也会打破     通道绑定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做到这一点。