2

そのため、TLS 1.2 プロトコルのみを受け入れるようにサードパーティ (libtorrent) を変更しようとしています。

SSL コンテキストのセットアップの一部:

boost::shared_ptr<context> ctx = boost::make_shared<context>(boost::ref(m_ses.get_io_service()), context::tlsv12)

ctx->set_options(context::default_workarounds
        | boost::asio::ssl::context::no_sslv2
        | boost::asio::ssl::context::no_sslv3
        | boost::asio::ssl::context::no_tlsv1
        | boost::asio::ssl::context::no_tlsv1_1
        | boost::asio::ssl::context::single_dh_use);

ただし、OpenSSL s_client との接続をテストしている場合でも、tls 1.0 および tls 1.1 接続を受け入れるようです。

私が間違っていることはありますか?

編集: オプションに「| boost::asio::ssl::context::no_tlsv1_1」を追加しました。古いブースト リファレンス ガイドを参照していることに気付きました。しかし、何も変わりませんでした。

編集:この接続が双方向/相互認証接続であることに言及していないことに気付きました。それが何かを変えるかどうかはわかりません。

4

2 に答える 2

1

これは暗闇での完全なショットですが、これを試してください。

TLS 1.2 に固有の暗号の文字列を作成してから呼び出してください

char* TLS_12_CIPHERS = "... list of ciphers specific to TLS 1.2";
SSL_CTX_set_cipher_list(ctx->native_handle(), TLS_12_CIPHERS);

次に、クライアントではなく、サーバーが使用したい暗号を選択するコンテキスト (サーバーコンテキストであると仮定) にオプションを設定します。

SSL_CTX_set_options(ctx->native_handle(), SSL_OP_CIPHER_SERVER_PREFERENCE);

boost::asio::ssl が no_X オプションを指定することでこのようなことを処理してくれると思うかもしれませんが、私には確信が持てません。私が言ったように、これは闇の中のショットですが、この方法で OpenSSL API を使用してコンテキストを明示的に構成すると、求めている条件が強制されるはずです。どこかで、どういうわけか、非 TLS 1.2 接続を許可するように競合するオプションが設定されている場合でも、これらのオプションを使用すると、非 TLS 1.2 接続はエラー「共有暗号なし」で失敗します。

サーバーが 1.2 以外の接続が受け入れられることをアドバタイズしている理由については不明ですが、考えられる説明の 1 つは、これをアドバタイズしているデフォルトのコンテキストがあることです。これが、sehe が「すべての接続に適用する」という点を強調した理由です。

以下は、 TLS 1.2 固有の暗号のリストです。

于 2015-06-25T07:47:10.860 に答える