最近、トリプル握手問題が発覚しました。セッションの再開を無効にすることでこれが軽減されるかどうかは、別の質問のトピックです。なんらかの理由で無効にしたいとしましょう(基本的に私のパラノイア)。
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)
誰かがこれを確認できますか?
Dr. Henson がOpenSSL User Mailing listでこれに答えたと思います。
https://secure-resumption.com/で説明されている攻撃は、TLS チャネル バインディングの TLS 固有の RFC 5929 も破ります。
SCRAM (RFC 5802) で定義されているように、チャネル バインディングに tls-unique を引き続き使用したいと思います。セッション キャッシングが無効になっている場合、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でそれを行う方法がわかりません。