Merge pull request #24955 from matthewstevenson88/fix-tls-version-negotiation

Fix TLS version selection in SSL transport security.
pull/24974/head
matthewstevenson88 4 years ago committed by GitHub
commit 8f5dcdf554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      src/core/tsi/ssl_transport_security.cc

@ -910,12 +910,18 @@ static tsi_result tsi_set_min_and_max_tls_versions(
return TSI_INVALID_ARGUMENT;
}
#if OPENSSL_VERSION_NUMBER >= 0x10100000
// Set the min TLS version of the SSL context.
// Set the min TLS version of the SSL context if using OpenSSL version
// >= 1.1.0. This OpenSSL version is required because the
// |SSL_CTX_set_min_proto_version| and |SSL_CTX_set_max_proto_version| APIs
// only exist in this version range.
switch (min_tls_version) {
case tsi_tls_version::TSI_TLS1_2:
SSL_CTX_set_min_proto_version(ssl_context, TLS1_2_VERSION);
break;
#if defined(TLS1_3_VERSION)
// If the library does not support TLS 1.3 and the caller requests a minimum
// of TLS 1.3, then return an error because the caller's request cannot be
// satisfied.
case tsi_tls_version::TSI_TLS1_3:
SSL_CTX_set_min_proto_version(ssl_context, TLS1_3_VERSION);
break;
@ -924,16 +930,21 @@ static tsi_result tsi_set_min_and_max_tls_versions(
gpr_log(GPR_INFO, "TLS version is not supported.");
return TSI_FAILED_PRECONDITION;
}
// Set the max TLS version of the SSL context.
switch (max_tls_version) {
case tsi_tls_version::TSI_TLS1_2:
SSL_CTX_set_max_proto_version(ssl_context, TLS1_2_VERSION);
break;
#if defined(TLS1_3_VERSION)
case tsi_tls_version::TSI_TLS1_3:
#if defined(TLS1_3_VERSION)
SSL_CTX_set_max_proto_version(ssl_context, TLS1_3_VERSION);
break;
#else
// If the library does not support TLS 1.3, then set the max TLS version
// to TLS 1.2 instead.
SSL_CTX_set_max_proto_version(ssl_context, TLS1_2_VERSION);
#endif
break;
default:
gpr_log(GPR_INFO, "TLS version is not supported.");
return TSI_FAILED_PRECONDITION;

Loading…
Cancel
Save