From b21fc9c4d4c0e144028ab5f9c199a38fd33ecc19 Mon Sep 17 00:00:00 2001 From: jiangtaoli2016 Date: Wed, 18 Mar 2020 12:00:10 -0700 Subject: [PATCH] Add a test on bad SNI and ensure handshake succeeds --- test/core/tsi/ssl_transport_security_test.cc | 37 +++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/test/core/tsi/ssl_transport_security_test.cc b/test/core/tsi/ssl_transport_security_test.cc index 844a12c261e..ee9f0e3adda 100644 --- a/test/core/tsi/ssl_transport_security_test.cc +++ b/test/core/tsi/ssl_transport_security_test.cc @@ -16,23 +16,23 @@ * */ +#include "src/core/tsi/ssl_transport_security.h" + +#include +#include +#include +#include #include #include #include #include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/security/security_connector/security_connector.h" -#include "src/core/tsi/ssl_transport_security.h" #include "src/core/tsi/transport_security.h" #include "src/core/tsi/transport_security_interface.h" #include "test/core/tsi/transport_security_test_lib.h" #include "test/core/util/test_config.h" -#include -#include -#include -#include - extern "C" { #include #include @@ -45,6 +45,7 @@ extern "C" { #define SSL_TSI_TEST_SERVER_KEY_CERT_PAIRS_NUM 2 #define SSL_TSI_TEST_BAD_SERVER_KEY_CERT_PAIRS_NUM 1 #define SSL_TSI_TEST_CREDENTIALS_DIR "src/core/tsi/test_creds/" +#define SSL_TSI_TEST_WRONG_SNI "test.google.cn" // OpenSSL 1.1 uses AES256 for encryption session ticket by default so specify // different STEK size. @@ -308,10 +309,14 @@ static void ssl_test_check_handshaker_peers(tsi_test_fixture* fixture) { check_session_reusage(ssl_fixture, &peer); check_alpn(ssl_fixture, &peer); check_security_level(&peer); - if (ssl_fixture->server_name_indication != nullptr) { - check_server1_peer(&peer); - } else { + if (ssl_fixture->server_name_indication == nullptr || + strcmp(ssl_fixture->server_name_indication, SSL_TSI_TEST_WRONG_SNI) == + 0) { + // Expect server to use default server0.pem. check_server0_peer(&peer); + } else { + // Expect server to use server1.pem. + check_server1_peer(&peer); } } else { GPR_ASSERT(ssl_fixture->base.client_result == nullptr); @@ -551,6 +556,19 @@ void ssl_tsi_test_do_handshake_with_server_name_indication_wild_star_domain() { tsi_test_fixture_destroy(fixture); } +void ssl_tsi_test_do_handshake_with_wrong_server_name_indication() { + gpr_log(GPR_INFO, + "ssl_tsi_test_do_handshake_with_wrong_server_name_indication"); + /* server certs do not contain "test.google.cn". */ + tsi_test_fixture* fixture = ssl_tsi_test_fixture_create(); + ssl_tsi_test_fixture* ssl_fixture = + reinterpret_cast(fixture); + ssl_fixture->server_name_indication = + const_cast(SSL_TSI_TEST_WRONG_SNI); + tsi_test_do_handshake(fixture); + tsi_test_fixture_destroy(fixture); +} + void ssl_tsi_test_do_handshake_with_bad_server_cert() { gpr_log(GPR_INFO, "ssl_tsi_test_do_handshake_with_bad_server_cert"); tsi_test_fixture* fixture = ssl_tsi_test_fixture_create(); @@ -915,6 +933,7 @@ int main(int argc, char** argv) { ssl_tsi_test_do_handshake_with_client_authentication_and_root_store(); ssl_tsi_test_do_handshake_with_server_name_indication_exact_domain(); ssl_tsi_test_do_handshake_with_server_name_indication_wild_star_domain(); + ssl_tsi_test_do_handshake_with_wrong_server_name_indication(); ssl_tsi_test_do_handshake_with_bad_server_cert(); ssl_tsi_test_do_handshake_with_bad_client_cert(); #ifdef OPENSSL_IS_BORINGSSL