From 4d41a56e178d39ecf4874c18c2dccef29bbfec24 Mon Sep 17 00:00:00 2001 From: jiangtaoli2016 Date: Sun, 22 Mar 2020 22:34:55 -0700 Subject: [PATCH] SSL peer match name case-insensitive --- src/core/tsi/ssl_transport_security.cc | 6 ++++-- test/core/tsi/ssl_transport_security_test.cc | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/tsi/ssl_transport_security.cc b/src/core/tsi/ssl_transport_security.cc index 3f4aa96de6f..cb74590db3d 100644 --- a/src/core/tsi/ssl_transport_security.cc +++ b/src/core/tsi/ssl_transport_security.cc @@ -35,6 +35,8 @@ #include #endif +#include "absl/strings/match.h" + #include #include #include @@ -1658,7 +1660,7 @@ static int does_entry_match_name(grpc_core::StringView entry, if (entry.empty()) return 0; } - if (name == entry) { + if (absl::EqualsIgnoreCase(name, entry)) { return 1; /* Perfect match. */ } if (entry.front() != '*') return 0; @@ -1685,7 +1687,7 @@ static int does_entry_match_name(grpc_core::StringView entry, if (name_subdomain.back() == '.') { name_subdomain.remove_suffix(1); } - return !entry.empty() && name_subdomain == entry; + return !entry.empty() && absl::EqualsIgnoreCase(name_subdomain, entry); } static int ssl_server_handshaker_factory_servername_callback(SSL* ssl, diff --git a/test/core/tsi/ssl_transport_security_test.cc b/test/core/tsi/ssl_transport_security_test.cc index 844a12c261e..2f86f5c9c97 100644 --- a/test/core/tsi/ssl_transport_security_test.cc +++ b/test/core/tsi/ssl_transport_security_test.cc @@ -235,6 +235,9 @@ void check_server0_peer(tsi_peer* peer) { nullptr); GPR_ASSERT(tsi_ssl_peer_matches_name(peer, "foo.test.google.com.au") == 1); GPR_ASSERT(tsi_ssl_peer_matches_name(peer, "bar.test.google.com.au") == 1); + GPR_ASSERT(tsi_ssl_peer_matches_name(peer, "BAR.TEST.GOOGLE.COM.AU") == 1); + GPR_ASSERT(tsi_ssl_peer_matches_name(peer, "Bar.Test.Google.Com.Au") == 1); + GPR_ASSERT(tsi_ssl_peer_matches_name(peer, "bAr.TeST.gOOgle.cOm.AU") == 1); GPR_ASSERT(tsi_ssl_peer_matches_name(peer, "bar.test.google.blah") == 0); GPR_ASSERT(tsi_ssl_peer_matches_name(peer, "foo.bar.test.google.com.au") == 0);