2014-03-13 59 views
2

最近披露Tripple Handshake Issue。無論是否禁用會話恢復都會緩解這個問題,這是another question的一個主題。讓我們假設我想禁止它出於任何原因(基本上是我的偏執狂)。如何禁用pyOpenSSL中的會話恢復?

在C禁用此功能,它看起來像一個應該使用這樣的:

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); 

是否有人可以證實這一點?

但如何在pyopenssl中做到這一點?

回答

0

有人可以確認嗎?

我相信Henson博士在OpenSSL User Mailing list回答了這個問題。

https://secure-resumption.com/符所描述的攻擊也TLS 通道結合TLS-獨特RFC 5929

我仍然想使用TLS-獨特用於信道綁定中 SCRAM定義(RFC 5802) 。如果會話緩存被禁用,OpenSSL是否可用於通道綁定並保護 免受此攻擊?

SSL_CTX_set_session_cache_mode(CTX,SSL_SESS_CACHE_OFF)

是否有必要使用不同的功能禁用恢復?

您還需要禁用會話票據。

注意攻擊的初始階段要求攻擊者擁有私鑰和客戶端信任的證書。我很樂意知道在您的情況下如何發生這種情況。

因此,根據亨森博士,你還需要調用SSL_CTX_set_optionsSSL_OP_NO_TICKET。請參閱 SSL_CTX_set_options(3)處的OpenSSL文檔。

雖然我不知道如何在Python中做到這一點。

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)