|  | @@ -16,23 +16,23 @@
 | 
	
		
			
				|  |  |   *
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#include "src/core/tsi/ssl_transport_security.h"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#include <grpc/grpc.h>
 | 
	
		
			
				|  |  | +#include <grpc/support/alloc.h>
 | 
	
		
			
				|  |  | +#include <grpc/support/log.h>
 | 
	
		
			
				|  |  | +#include <grpc/support/string_util.h>
 | 
	
		
			
				|  |  |  #include <stdbool.h>
 | 
	
		
			
				|  |  |  #include <stdio.h>
 | 
	
		
			
				|  |  |  #include <string.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #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 <grpc/grpc.h>
 | 
	
		
			
				|  |  | -#include <grpc/support/alloc.h>
 | 
	
		
			
				|  |  | -#include <grpc/support/log.h>
 | 
	
		
			
				|  |  | -#include <grpc/support/string_util.h>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  extern "C" {
 | 
	
		
			
				|  |  |  #include <openssl/crypto.h>
 | 
	
		
			
				|  |  |  #include <openssl/pem.h>
 | 
	
	
		
			
				|  | @@ -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<ssl_tsi_test_fixture*>(fixture);
 | 
	
		
			
				|  |  | +  ssl_fixture->server_name_indication =
 | 
	
		
			
				|  |  | +      const_cast<char*>(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
 |