TLS 1.1とTLS 1.2の両方をサポートするようにSSLサーバを取得しようとしていますが、以前のバージョンはサポートしていません。Boost :: asio SSLサーバーはTLS 1.1とTLS 1.2の両方を受け入れますか?
これは私が私のSSLコンテキストを設定する方法である:
// Here io is an instance of io_service
boost::asio::ssl::context ctx(io, boost::asio::ssl::context::tlsv12_server);
ctx.use_certificate_chain_file("./certs.pem");
ctx.use_private_key_file("./key.pem", ssl::context::pem);
SSL_CTX_set_cipher_list(ctx.native_handle(), "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS");
ctx.set_options(boost::asio::ssl::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::single_dh_use
| SSL_OP_CIPHER_SERVER_PREFERENCE);
ctx.clear_options(boost::asio::ssl::context::no_tlsv1_1);
// Creating socket:
using ssl_socket = boost::asio::ssl::stream<boost::asio::ip::tcp::socket>;
auto sock = std::make_unique<ssl_socket>(io, ctx);
それが何らかの形でデフォルトで設定されていた場合、私はしても、no_tlsv1_1
オプションをオフにしてみました。私は設定を下げる場合でも:
ctx.use_certificate_chain_file("./certs.pem");
ctx.use_private_key_file("./key.pem", ssl::context::pem);
TLS 1.1クライアントに接続しようと、async_handshake
コールバックは、まだエラーコードasio.ssl:336109835, wrong version number
を与えます。 TLS 1.2クライアントと接続すると、すべて正常に動作します。
SSLコンテキストを構築するときに、第2パラメータをtlsv12_server
からtlsv11_server
に変更すると、TLS 1.1は正常に動作しますが、TLS 1.2は使用できなくなります。
私はBoostバージョン1.54と1.65.1を試しましたが、opensslバージョン1.0.2gと1.0.2lはすべてのケースに当てはまりました。 Linux Mintの実行18.2
TLS 1.1とTLS 1.2の両方を許可するにはどうすればよいですか?