TLS 1.1과 TLS 1.2를 모두 지원하도록 SSL 서버를 설치하려고하지만 이전 버전은 지원하지 않습니다. 심지어 그것이 어떻게 든 기본적으로 설정되어있는 경우는 no_tlsv1_1
옵션의 선택을 취소하려고Boost :: asio SSL 서버를 만드는 방법은 TLS 1.1과 TLS 1.2를 모두 허용합니까?
// 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);
:
이것은 내 SSL 컨텍스트를 구성하는 방법입니다. 나는에 구성을 감소하더라도 :
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 컨텍스트를 구성 할 때 두 번째 매개 변수를 tlsv12_server
에서 tlsv11_server
으로 변경하면 TLS 1.1은 정상적으로 작동하지만 TLS 1.2는 사용할 수 없게됩니다.
부스트 버전 1.54 및 1.65.1을 시도했으며 openssl 버전 1.0.2g 및 1.0.2l을 모두 사용하고 있습니다. Linux Mint 실행하기 18.2
TLS 1.1과 TLS 1.2를 모두 허용하려면 어떻게해야합니까?