ssl_utils.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
22 
23 #include <stdint.h>
24 #include <string.h>
25 
26 #include <memory>
27 #include <vector>
28 
29 #include "absl/strings/match.h"
30 #include "absl/strings/str_cat.h"
31 #include "absl/strings/str_split.h"
32 
34 #include <grpc/support/alloc.h>
35 #include <grpc/support/log.h>
36 #include <grpc/support/sync.h>
37 
51 
52 /* -- Constants. -- */
53 
54 #if defined(GRPC_ROOT_PEM_PATH)
55 static const char* installed_roots_path = GRPC_ROOT_PEM_PATH;
56 #elif defined(INSTALL_PREFIX)
57 static const char* installed_roots_path =
58  INSTALL_PREFIX "/usr/share/grpc/roots.pem";
59 #else
60 static const char* installed_roots_path = "/usr/share/grpc/roots.pem";
61 #endif
62 
63 #ifndef TSI_OPENSSL_ALPN_SUPPORT
64 #define TSI_OPENSSL_ALPN_SUPPORT 1
65 #endif
66 
67 /* -- Overridden default roots. -- */
68 
70 
73 }
74 
75 /* -- Cipher suites. -- */
76 
78 static const char* cipher_suites = nullptr;
79 
80 // All cipher suites for default are compliant with HTTP2.
82  grpc_ssl_cipher_suites,
83  "TLS_AES_128_GCM_SHA256:"
84  "TLS_AES_256_GCM_SHA384:"
85  "TLS_CHACHA20_POLY1305_SHA256:"
86  "ECDHE-ECDSA-AES128-GCM-SHA256:"
87  "ECDHE-ECDSA-AES256-GCM-SHA384:"
88  "ECDHE-RSA-AES128-GCM-SHA256:"
89  "ECDHE-RSA-AES256-GCM-SHA384",
90  "A colon separated list of cipher suites to use with OpenSSL")
91 
92 static void init_cipher_suites(void) {
94  GPR_GLOBAL_CONFIG_GET(grpc_ssl_cipher_suites);
95  cipher_suites = value.release();
96 }
97 
98 /* --- Util --- */
99 
100 const char* grpc_get_ssl_cipher_suites(void) {
101  gpr_once_init(&cipher_suites_once, init_cipher_suites);
102  return cipher_suites;
103 }
104 
107  grpc_ssl_client_certificate_request_type grpc_request_type) {
108  switch (grpc_request_type) {
111 
114 
117 
120 
123 
124  default:
126  }
127 }
128 
130  switch (tls_version) {
135  default:
136  gpr_log(GPR_INFO, "Falling back to TLS 1.2.");
138  }
139 }
140 
142 #if TSI_OPENSSL_ALPN_SUPPORT
143  /* Check the ALPN if ALPN is supported. */
144  const tsi_peer_property* p =
146  if (p == nullptr) {
148  "Cannot check peer: missing selected ALPN property.");
149  }
150  if (!grpc_chttp2_is_alpn_version_supported(p->value.data, p->value.length)) {
152  "Cannot check peer: invalid ALPN value.");
153  }
154 #endif /* TSI_OPENSSL_ALPN_SUPPORT */
155  return GRPC_ERROR_NONE;
156 }
157 
159  const tsi_peer* peer) {
160  /* Check the peer name if specified. */
161  if (!peer_name.empty() && !grpc_ssl_host_matches_name(peer, peer_name)) {
163  absl::StrCat("Peer name ", peer_name, " is not in peer certificate"));
164  }
165  return GRPC_ERROR_NONE;
166 }
167 
169  size_t num_key_cert_pairs) {
170  if (kp == nullptr) return;
171  for (size_t i = 0; i < num_key_cert_pairs; i++) {
172  gpr_free(const_cast<char*>(kp[i].private_key));
173  gpr_free(const_cast<char*>(kp[i].cert_chain));
174  }
175  gpr_free(kp);
176 }
177 
178 namespace grpc_core {
179 
181  absl::string_view target_name,
182  absl::string_view overridden_target_name,
183  grpc_auth_context* auth_context) {
187  /* If the target name was overridden, then the original target_name was
188  'checked' transitively during the previous peer check at the end of the
189  handshake. */
190  if (!overridden_target_name.empty() && host == target_name) {
192  }
193  if (status != GRPC_SECURITY_OK) {
194  gpr_log(GPR_ERROR, "call host does not match SSL server name");
197  "call host does not match SSL server name");
198  }
200  return absl::OkStatus();
201 }
202 
203 } // namespace grpc_core
204 
205 const char** grpc_fill_alpn_protocol_strings(size_t* num_alpn_protocols) {
206  GPR_ASSERT(num_alpn_protocols != nullptr);
207  *num_alpn_protocols = grpc_chttp2_num_alpn_versions();
208  const char** alpn_protocol_strings = static_cast<const char**>(
209  gpr_malloc(sizeof(const char*) * (*num_alpn_protocols)));
210  for (size_t i = 0; i < *num_alpn_protocols; i++) {
211  alpn_protocol_strings[i] = grpc_chttp2_get_alpn_version_index(i);
212  }
213  return alpn_protocol_strings;
214 }
215 
217  absl::string_view peer_name) {
218  absl::string_view allocated_name;
219  absl::string_view ignored_port;
220  grpc_core::SplitHostPort(peer_name, &allocated_name, &ignored_port);
221  if (allocated_name.empty()) return 0;
222 
223  // IPv6 zone-id should not be included in comparisons.
224  const size_t zone_id = allocated_name.find('%');
225  if (zone_id != absl::string_view::npos) {
226  allocated_name.remove_suffix(allocated_name.size() - zone_id);
227  }
228  return tsi_ssl_peer_matches_name(peer, allocated_name);
229 }
230 
232  absl::string_view other_target_name,
233  absl::string_view overridden_target_name,
234  absl::string_view other_overridden_target_name) {
235  int c = target_name.compare(other_target_name);
236  if (c != 0) return c;
237  return overridden_target_name.compare(other_overridden_target_name);
238 }
239 
240 static bool IsSpiffeId(absl::string_view uri) {
241  // Return false without logging for a non-spiffe uri scheme.
242  if (!absl::StartsWith(uri, "spiffe://")) {
243  return false;
244  };
245  if (uri.size() > 2048) {
246  gpr_log(GPR_INFO, "Invalid SPIFFE ID: ID longer than 2048 bytes.");
247  return false;
248  }
249  std::vector<absl::string_view> splits = absl::StrSplit(uri, '/');
250  if (splits.size() < 4 || splits[3].empty()) {
251  gpr_log(GPR_INFO, "Invalid SPIFFE ID: workload id is empty.");
252  return false;
253  }
254  if (splits[2].size() > 255) {
255  gpr_log(GPR_INFO, "Invalid SPIFFE ID: domain longer than 255 characters.");
256  return false;
257  }
258  return true;
259 }
260 
262  const tsi_peer* peer, const char* transport_security_type) {
263  size_t i;
264  const char* peer_identity_property_name = nullptr;
265 
266  /* The caller has checked the certificate type property. */
267  GPR_ASSERT(peer->property_count >= 1);
269  grpc_core::MakeRefCounted<grpc_auth_context>(nullptr);
272  transport_security_type);
273  const char* spiffe_data = nullptr;
274  size_t spiffe_length = 0;
275  int uri_count = 0;
276  bool has_spiffe_id = false;
277  for (i = 0; i < peer->property_count; i++) {
278  const tsi_peer_property* prop = &peer->properties[i];
279  if (prop->name == nullptr) continue;
280  if (strcmp(prop->name, TSI_X509_SUBJECT_PEER_PROPERTY) == 0) {
282  prop->value.data, prop->value.length);
283  } else if (strcmp(prop->name, TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY) ==
284  0) {
285  /* If there is no subject alt name, have the CN as the identity. */
286  if (peer_identity_property_name == nullptr) {
287  peer_identity_property_name = GRPC_X509_CN_PROPERTY_NAME;
288  }
290  prop->value.data, prop->value.length);
291  } else if (strcmp(prop->name,
293  peer_identity_property_name = GRPC_X509_SAN_PROPERTY_NAME;
295  prop->value.data, prop->value.length);
296  } else if (strcmp(prop->name, TSI_X509_PEM_CERT_PROPERTY) == 0) {
299  prop->value.data, prop->value.length);
300  } else if (strcmp(prop->name, TSI_X509_PEM_CERT_CHAIN_PROPERTY) == 0) {
303  prop->value.data, prop->value.length);
304  } else if (strcmp(prop->name, TSI_SSL_SESSION_REUSED_PEER_PROPERTY) == 0) {
307  prop->value.data, prop->value.length);
308  } else if (strcmp(prop->name, TSI_SECURITY_LEVEL_PEER_PROPERTY) == 0) {
311  prop->value.data, prop->value.length);
312  } else if (strcmp(prop->name, TSI_X509_DNS_PEER_PROPERTY) == 0) {
314  prop->value.data, prop->value.length);
315  } else if (strcmp(prop->name, TSI_X509_URI_PEER_PROPERTY) == 0) {
317  prop->value.data, prop->value.length);
318  uri_count++;
319  absl::string_view spiffe_id(prop->value.data, prop->value.length);
320  if (IsSpiffeId(spiffe_id)) {
321  spiffe_data = prop->value.data;
322  spiffe_length = prop->value.length;
323  has_spiffe_id = true;
324  }
325  } else if (strcmp(prop->name, TSI_X509_EMAIL_PEER_PROPERTY) == 0) {
327  prop->value.data, prop->value.length);
328  } else if (strcmp(prop->name, TSI_X509_IP_PEER_PROPERTY) == 0) {
330  prop->value.data, prop->value.length);
331  }
332  }
333  if (peer_identity_property_name != nullptr) {
335  ctx.get(), peer_identity_property_name) == 1);
336  }
337  // A valid SPIFFE certificate can only have exact one URI SAN field.
338  if (has_spiffe_id) {
339  if (uri_count == 1) {
340  GPR_ASSERT(spiffe_length > 0);
341  GPR_ASSERT(spiffe_data != nullptr);
344  spiffe_data, spiffe_length);
345  } else {
346  gpr_log(GPR_INFO, "Invalid SPIFFE ID: multiple URI SANs.");
347  }
348  }
349  return ctx;
350 }
351 
353  const grpc_auth_property* prop,
354  const char* tsi_prop_name) {
355  tsi_peer_property* tsi_prop = &peer->properties[peer->property_count++];
356  tsi_prop->name = const_cast<char*>(tsi_prop_name);
357  tsi_prop->value.data = prop->value;
358  tsi_prop->value.length = prop->value_length;
359 }
360 
362  const grpc_auth_context* auth_context) {
363  size_t max_num_props = 0;
365  const grpc_auth_property* prop;
366  tsi_peer peer;
367  memset(&peer, 0, sizeof(peer));
368 
369  it = grpc_auth_context_property_iterator(auth_context);
370  while (grpc_auth_property_iterator_next(&it) != nullptr) max_num_props++;
371 
372  if (max_num_props > 0) {
373  peer.properties = static_cast<tsi_peer_property*>(
374  gpr_malloc(max_num_props * sizeof(tsi_peer_property)));
375  it = grpc_auth_context_property_iterator(auth_context);
376  while ((prop = grpc_auth_property_iterator_next(&it)) != nullptr) {
377  if (strcmp(prop->name, GRPC_X509_SAN_PROPERTY_NAME) == 0) {
380  } else if (strcmp(prop->name, GRPC_X509_SUBJECT_PROPERTY_NAME) == 0) {
383  } else if (strcmp(prop->name, GRPC_X509_CN_PROPERTY_NAME) == 0) {
386  } else if (strcmp(prop->name, GRPC_X509_PEM_CERT_PROPERTY_NAME) == 0) {
389  } else if (strcmp(prop->name,
393  } else if (strcmp(prop->name, GRPC_X509_PEM_CERT_CHAIN_PROPERTY_NAME) ==
394  0) {
397  } else if (strcmp(prop->name, GRPC_PEER_DNS_PROPERTY_NAME) == 0) {
400  } else if (strcmp(prop->name, GRPC_PEER_URI_PROPERTY_NAME) == 0) {
403  } else if (strcmp(prop->name, GRPC_PEER_SPIFFE_ID_PROPERTY_NAME) == 0) {
406  } else if (strcmp(prop->name, GRPC_PEER_EMAIL_PROPERTY_NAME) == 0) {
409  } else if (strcmp(prop->name, GRPC_PEER_IP_PROPERTY_NAME) == 0) {
412  }
413  }
414  }
415  return peer;
416 }
417 
419  if (peer->properties != nullptr) gpr_free(peer->properties);
420 }
421 
423  tsi_ssl_pem_key_cert_pair* pem_key_cert_pair, const char* pem_root_certs,
424  bool skip_server_certificate_verification, tsi_tls_version min_tls_version,
425  tsi_tls_version max_tls_version, tsi_ssl_session_cache* ssl_session_cache,
427  const char* crl_directory,
428  tsi_ssl_client_handshaker_factory** handshaker_factory) {
429  const char* root_certs;
430  const tsi_ssl_root_certs_store* root_store;
431  if (pem_root_certs == nullptr) {
433  "No root certificates specified; use ones stored in system default "
434  "locations instead");
435  // Use default root certificates.
437  if (root_certs == nullptr) {
438  gpr_log(GPR_ERROR, "Could not get default pem root certs.");
439  return GRPC_SECURITY_ERROR;
440  }
442  } else {
443  root_certs = pem_root_certs;
444  root_store = nullptr;
445  }
446  bool has_key_cert_pair = pem_key_cert_pair != nullptr &&
447  pem_key_cert_pair->private_key != nullptr &&
448  pem_key_cert_pair->cert_chain != nullptr;
450  GPR_DEBUG_ASSERT(root_certs != nullptr);
451  options.pem_root_certs = root_certs;
452  options.root_store = root_store;
453  options.alpn_protocols =
454  grpc_fill_alpn_protocol_strings(&options.num_alpn_protocols);
455  if (has_key_cert_pair) {
456  options.pem_key_cert_pair = pem_key_cert_pair;
457  }
458  options.cipher_suites = grpc_get_ssl_cipher_suites();
459  options.session_cache = ssl_session_cache;
460  options.key_logger = tls_session_key_logger;
461  options.skip_server_certificate_verification =
462  skip_server_certificate_verification;
463  options.min_tls_version = min_tls_version;
464  options.max_tls_version = max_tls_version;
465  options.crl_directory = crl_directory;
466  const tsi_result result =
468  handshaker_factory);
469  gpr_free(options.alpn_protocols);
470  if (result != TSI_OK) {
471  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
473  return GRPC_SECURITY_ERROR;
474  }
475  return GRPC_SECURITY_OK;
476 }
477 
479  tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs, size_t num_key_cert_pairs,
480  const char* pem_root_certs,
481  grpc_ssl_client_certificate_request_type client_certificate_request,
482  tsi_tls_version min_tls_version, tsi_tls_version max_tls_version,
484  const char* crl_directory,
485  tsi_ssl_server_handshaker_factory** handshaker_factory) {
486  size_t num_alpn_protocols = 0;
487  const char** alpn_protocol_strings =
488  grpc_fill_alpn_protocol_strings(&num_alpn_protocols);
490  options.pem_key_cert_pairs = pem_key_cert_pairs;
491  options.num_key_cert_pairs = num_key_cert_pairs;
492  options.pem_client_root_certs = pem_root_certs;
493  options.client_certificate_request =
494  grpc_get_tsi_client_certificate_request_type(client_certificate_request);
495  options.cipher_suites = grpc_get_ssl_cipher_suites();
496  options.alpn_protocols = alpn_protocol_strings;
497  options.num_alpn_protocols = static_cast<uint16_t>(num_alpn_protocols);
498  options.min_tls_version = min_tls_version;
499  options.max_tls_version = max_tls_version;
500  options.key_logger = tls_session_key_logger;
501  options.crl_directory = crl_directory;
502  const tsi_result result =
504  handshaker_factory);
505  gpr_free(alpn_protocol_strings);
506  if (result != TSI_OK) {
507  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
509  return GRPC_SECURITY_ERROR;
510  }
511  return GRPC_SECURITY_OK;
512 }
513 
514 /* --- Ssl cache implementation. --- */
515 
518  return reinterpret_cast<grpc_ssl_session_cache*>(cache);
519 }
520 
522  tsi_ssl_session_cache* tsi_cache =
523  reinterpret_cast<tsi_ssl_session_cache*>(cache);
524  tsi_ssl_session_cache_unref(tsi_cache);
525 }
526 
527 static void* grpc_ssl_session_cache_arg_copy(void* p) {
528  tsi_ssl_session_cache* tsi_cache =
529  reinterpret_cast<tsi_ssl_session_cache*>(p);
530  // destroy call below will unref the pointer.
531  tsi_ssl_session_cache_ref(tsi_cache);
532  return p;
533 }
534 
536  tsi_ssl_session_cache* tsi_cache =
537  reinterpret_cast<tsi_ssl_session_cache*>(p);
538  tsi_ssl_session_cache_unref(tsi_cache);
539 }
540 
541 static int grpc_ssl_session_cache_arg_cmp(void* p, void* q) {
542  return grpc_core::QsortCompare(p, q);
543 }
544 
546  grpc_ssl_session_cache* cache) {
547  static const grpc_arg_pointer_vtable vtable = {
551  };
553  const_cast<char*>(GRPC_SSL_SESSION_CACHE_ARG), cache, &vtable);
554 }
555 
556 /* --- Default SSL root store implementation. --- */
557 
558 namespace grpc_core {
559 
562 
564  InitRootStore();
565  return default_root_store_;
566 }
567 
569  InitRootStore();
571  ? nullptr
572  : reinterpret_cast<const char*>
574 }
575 
578  const bool not_use_system_roots =
579  GPR_GLOBAL_CONFIG_GET(grpc_not_use_system_ssl_roots);
580  // First try to load the roots from the configuration.
581  UniquePtr<char> default_root_certs_path =
582  GPR_GLOBAL_CONFIG_GET(grpc_default_ssl_roots_file_path);
583  if (strlen(default_root_certs_path.get()) > 0) {
585  "load_file", grpc_load_file(default_root_certs_path.get(), 1, &result));
586  }
587  // Try overridden roots if needed.
589  if (GRPC_SLICE_IS_EMPTY(result) && ssl_roots_override_cb != nullptr) {
590  char* pem_root_certs = nullptr;
592  if (ovrd_res == GRPC_SSL_ROOTS_OVERRIDE_OK) {
593  GPR_ASSERT(pem_root_certs != nullptr);
596  strlen(pem_root_certs) + 1); // nullptr terminator.
597  }
599  }
600  // Try loading roots from OS trust store if flag is enabled.
601  if (GRPC_SLICE_IS_EMPTY(result) && !not_use_system_roots) {
603  }
604  // Fallback to roots manually shipped with gRPC.
607  GRPC_LOG_IF_ERROR("load_file",
609  }
610  return result;
611 }
612 
614  static gpr_once once = GPR_ONCE_INIT;
616 }
617 
622  tsi_ssl_root_certs_store_create(reinterpret_cast<const char*>(
624  }
625 }
626 
627 } // namespace grpc_core
absl::StrSplit
strings_internal::Splitter< typename strings_internal::SelectDelimiter< Delimiter >::type, AllowEmpty, absl::string_view > StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d)
Definition: abseil-cpp/absl/strings/str_split.h:499
grpc_arg
Definition: grpc_types.h:103
GRPC_PEER_DNS_PROPERTY_NAME
#define GRPC_PEER_DNS_PROPERTY_NAME
Definition: grpc_security_constants.h:48
GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME
#define GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME
Definition: grpc_security_constants.h:47
TSI_DONT_REQUEST_CLIENT_CERTIFICATE
@ TSI_DONT_REQUEST_CLIENT_CERTIFICATE
Definition: transport_security_interface.h:62
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
grpc_ssl_check_peer_name
grpc_error_handle grpc_ssl_check_peer_name(absl::string_view peer_name, const tsi_peer *peer)
Definition: ssl_utils.cc:158
grpc_auth_context
Definition: security_context.h:63
tsi_create_ssl_server_handshaker_factory_with_options
tsi_result tsi_create_ssl_server_handshaker_factory_with_options(const tsi_ssl_server_handshaker_options *options, tsi_ssl_server_handshaker_factory **factory)
Definition: ssl_transport_security.cc:2179
grpc_fill_alpn_protocol_strings
const char ** grpc_fill_alpn_protocol_strings(size_t *num_alpn_protocols)
Definition: ssl_utils.cc:205
vtable
static const grpc_transport_vtable vtable
Definition: binder_transport.cc:680
regen-readme.it
it
Definition: regen-readme.py:15
load_system_roots.h
GRPC_ERROR_NONE
#define GRPC_ERROR_NONE
Definition: error.h:234
log.h
tsi_peer::properties
tsi_peer_property * properties
Definition: transport_security_interface.h:239
tsi_peer_property::value
struct tsi_peer_property::@48 value
ctx
Definition: benchmark-async.c:30
grpc_ssl_session_cache_create_lru
grpc_ssl_session_cache * grpc_ssl_session_cache_create_lru(size_t capacity)
Definition: ssl_utils.cc:516
TSI_TLS1_3
@ TSI_TLS1_3
Definition: transport_security_interface.h:91
grpc_load_file
grpc_error_handle grpc_load_file(const char *filename, int add_null_terminator, grpc_slice *output)
Definition: load_file.cc:33
absl::string_view::remove_suffix
ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR void remove_suffix(size_type n)
Definition: abseil-cpp/absl/strings/string_view.h:354
absl::StrCat
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
Definition: abseil-cpp/absl/strings/str_cat.cc:98
tsi_create_ssl_client_handshaker_factory_with_options
tsi_result tsi_create_ssl_client_handshaker_factory_with_options(const tsi_ssl_client_handshaker_options *options, tsi_ssl_client_handshaker_factory **factory)
Definition: ssl_transport_security.cc:2007
memset
return memset(p, 0, total)
load_file.h
GPR_DEBUG_ASSERT
#define GPR_DEBUG_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:103
gpr_once
pthread_once_t gpr_once
Definition: impl/codegen/sync_posix.h:50
grpc_chttp2_is_alpn_version_supported
int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size)
Definition: src/core/ext/transport/chttp2/alpn/alpn.cc:30
TSI_SSL_ALPN_SELECTED_PROTOCOL
#define TSI_SSL_ALPN_SELECTED_PROTOCOL
Definition: ssl_transport_security.h:44
pem_root_certs
static char * pem_root_certs
Definition: rb_channel_credentials.c:38
GRPC_SECURITY_ERROR
@ GRPC_SECURITY_ERROR
Definition: security_connector.h:52
TSI_X509_SUBJECT_PEER_PROPERTY
#define TSI_X509_SUBJECT_PEER_PROPERTY
Definition: ssl_transport_security.h:37
GPR_GLOBAL_CONFIG_GET
#define GPR_GLOBAL_CONFIG_GET(name)
Definition: global_config_generic.h:24
uint16_t
unsigned short uint16_t
Definition: stdint-msvc2008.h:79
tsi_ssl_pem_key_cert_pair
Definition: ssl_transport_security.h:101
TSI_X509_IP_PEER_PROPERTY
#define TSI_X509_IP_PEER_PROPERTY
Definition: ssl_transport_security.h:48
capacity
uint16_t capacity
Definition: protobuf/src/google/protobuf/descriptor.cc:948
cipher_suites_once
static gpr_once cipher_suites_once
Definition: ssl_utils.cc:77
absl::string_view::find
size_type find(string_view s, size_type pos=0) const noexcept
Definition: abseil-cpp/absl/strings/string_view.cc:81
grpc_ssl_peer_to_auth_context
grpc_core::RefCountedPtr< grpc_auth_context > grpc_ssl_peer_to_auth_context(const tsi_peer *peer, const char *transport_security_type)
Definition: ssl_utils.cc:261
grpc_core
Definition: call_metric_recorder.h:31
grpc_ssl_session_cache_arg_destroy
static void grpc_ssl_session_cache_arg_destroy(void *p)
Definition: ssl_utils.cc:535
TSI_SECURITY_LEVEL_PEER_PROPERTY
#define TSI_SECURITY_LEVEL_PEER_PROPERTY
Definition: transport_security_interface.h:226
GRPC_SSL_SESSION_REUSED_PROPERTY
#define GRPC_SSL_SESSION_REUSED_PROPERTY
Definition: grpc_security_constants.h:46
tsi_peer_property::length
size_t length
Definition: transport_security_interface.h:234
string.h
options
double_dict options[]
Definition: capstone_test.c:55
grpc_ssl_session_cache_destroy
void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache *cache)
Definition: ssl_utils.cc:521
absl::StartsWith
bool StartsWith(absl::string_view text, absl::string_view prefix) noexcept
Definition: third_party/abseil-cpp/absl/strings/match.h:58
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
tsi_ssl_client_handshaker_factory
Definition: ssl_transport_security.cc:93
grpc_chttp2_get_alpn_version_index
const char * grpc_chttp2_get_alpn_version_index(size_t i)
Definition: src/core/ext/transport/chttp2/alpn/alpn.cc:42
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
tsi_ssl_session_cache_unref
void tsi_ssl_session_cache_unref(tsi_ssl_session_cache *cache)
Definition: ssl_transport_security.cc:1048
useful.h
GPR_GLOBAL_CONFIG_DEFINE_STRING
GPR_GLOBAL_CONFIG_DEFINE_STRING(grpc_ssl_cipher_suites, "TLS_AES_128_GCM_SHA256:" "TLS_AES_256_GCM_SHA384:" "TLS_CHACHA20_POLY1305_SHA256:" "ECDHE-ECDSA-AES128-GCM-SHA256:" "ECDHE-ECDSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES128-GCM-SHA256:" "ECDHE-RSA-AES256-GCM-SHA384", "A colon separated list of cipher suites to use with OpenSSL") static void init_cipher_suites(void)
Definition: ssl_utils.cc:81
TLS1_3
@ TLS1_3
Definition: grpc_security_constants.h:146
absl::OkStatus
Status OkStatus()
Definition: third_party/abseil-cpp/absl/status/status.h:882
gpr_malloc
GPRAPI void * gpr_malloc(size_t size)
Definition: alloc.cc:29
GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
@ GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
Definition: grpc_security_constants.h:105
grpc_core::SplitHostPort
bool SplitHostPort(absl::string_view name, absl::string_view *host, absl::string_view *port)
Definition: host_port.cc:88
status
absl::Status status
Definition: rls.cc:251
TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
@ TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
Definition: transport_security_interface.h:66
ctx
static struct test_ctx ctx
Definition: test-ipc-send-recv.c:65
GPR_ONCE_INIT
#define GPR_ONCE_INIT
Definition: impl/codegen/sync_posix.h:52
tsi_ssl_pem_key_cert_pair::cert_chain
const char * cert_chain
Definition: ssl_transport_security.h:108
GRPC_LOG_IF_ERROR
#define GRPC_LOG_IF_ERROR(what, error)
Definition: error.h:398
grpc_core::DefaultSslRootStore::GetPemRootCerts
static const char * GetPemRootCerts()
Definition: ssl_utils.cc:568
grpc_ssl_session_cache_arg_cmp
static int grpc_ssl_session_cache_arg_cmp(void *p, void *q)
Definition: ssl_utils.cc:541
IsSpiffeId
static bool IsSpiffeId(absl::string_view uri)
Definition: ssl_utils.cc:240
cipher_suites
static const char * cipher_suites
Definition: ssl_utils.cc:78
xds_manager.p
p
Definition: xds_manager.py:60
grpc_ssl_session_cache_arg_copy
static void * grpc_ssl_session_cache_arg_copy(void *p)
Definition: ssl_utils.cc:527
ssl_transport_security.h
grpc_arg_pointer_vtable
Definition: grpc_types.h:85
grpc_auth_property_iterator_next
const GRPCAPI grpc_auth_property * grpc_auth_property_iterator_next(grpc_auth_property_iterator *it)
Definition: security_context.cc:182
TSI_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
@ TSI_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
Definition: transport_security_interface.h:63
grpc_core::DefaultSslRootStore::InitRootStore
static void InitRootStore()
Definition: ssl_utils.cc:613
tsi_ssl_server_handshaker_options
Definition: ssl_transport_security.h:279
GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
@ GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
Definition: grpc_security_constants.h:94
gpr_once_init
GPRAPI void gpr_once_init(gpr_once *once, void(*init_function)(void))
TSI_X509_URI_PEER_PROPERTY
#define TSI_X509_URI_PEER_PROPERTY
Definition: ssl_transport_security.h:46
grpc_types.h
grpc_ssl_session_cache_create_channel_arg
grpc_arg grpc_ssl_session_cache_create_channel_arg(grpc_ssl_session_cache *cache)
Definition: ssl_utils.cc:545
absl::UnauthenticatedError
Status UnauthenticatedError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:371
memory.h
grpc_core::DefaultSslRootStore::GetRootStore
static const tsi_ssl_root_certs_store * GetRootStore()
Definition: ssl_utils.cc:563
grpc_auth_context_set_peer_identity_property_name
GRPCAPI int grpc_auth_context_set_peer_identity_property_name(grpc_auth_context *ctx, const char *name)
Definition: security_context.cc:151
TSI_X509_DNS_PEER_PROPERTY
#define TSI_X509_DNS_PEER_PROPERTY
Definition: ssl_transport_security.h:45
TSI_OK
@ TSI_OK
Definition: transport_security_interface.h:32
GRPC_PEER_IP_PROPERTY_NAME
#define GRPC_PEER_IP_PROPERTY_NAME
Definition: grpc_security_constants.h:52
grpc_chttp2_num_alpn_versions
size_t grpc_chttp2_num_alpn_versions(void)
Definition: src/core/ext/transport/chttp2/alpn/alpn.cc:38
grpc_ssl_cmp_target_name
int grpc_ssl_cmp_target_name(absl::string_view target_name, absl::string_view other_target_name, absl::string_view overridden_target_name, absl::string_view other_overridden_target_name)
Definition: ssl_utils.cc:231
c
void c(T a)
Definition: miscompile_with_no_unique_address_test.cc:40
GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME
#define GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME
Definition: grpc_security_constants.h:26
tsi_ssl_session_cache_ref
void tsi_ssl_session_cache_ref(tsi_ssl_session_cache *cache)
Definition: ssl_transport_security.cc:1043
GRPC_PEER_SPIFFE_ID_PROPERTY_NAME
#define GRPC_PEER_SPIFFE_ID_PROPERTY_NAME
Definition: grpc_security_constants.h:49
grpc_core::RefCountedPtr< grpc_auth_context >
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
tsi_client_certificate_request_type
tsi_client_certificate_request_type
Definition: transport_security_interface.h:60
absl::string_view::size
constexpr size_type size() const noexcept
Definition: abseil-cpp/absl/strings/string_view.h:277
tsi_ssl_peer_matches_name
int tsi_ssl_peer_matches_name(const tsi_peer *peer, absl::string_view name)
Definition: ssl_transport_security.cc:2368
grpc_shallow_peer_from_ssl_auth_context
tsi_peer grpc_shallow_peer_from_ssl_auth_context(const grpc_auth_context *auth_context)
Definition: ssl_utils.cc:361
GRPC_SSL_ROOTS_OVERRIDE_FAIL
@ GRPC_SSL_ROOTS_OVERRIDE_FAIL
Definition: grpc_security_constants.h:69
grpc_tsi_ssl_pem_key_cert_pairs_destroy
void grpc_tsi_ssl_pem_key_cert_pairs_destroy(tsi_ssl_pem_key_cert_pair *kp, size_t num_key_cert_pairs)
Definition: ssl_utils.cc:168
GRPC_SLICE_IS_EMPTY
#define GRPC_SLICE_IS_EMPTY(slice)
Definition: include/grpc/impl/codegen/slice.h:112
TSI_TLS1_2
@ TSI_TLS1_2
Definition: transport_security_interface.h:90
grpc_ssl_tsi_server_handshaker_factory_init
grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(tsi_ssl_pem_key_cert_pair *pem_key_cert_pairs, size_t num_key_cert_pairs, const char *pem_root_certs, grpc_ssl_client_certificate_request_type client_certificate_request, tsi_tls_version min_tls_version, tsi_tls_version max_tls_version, tsi::TlsSessionKeyLoggerCache::TlsSessionKeyLogger *tls_session_key_logger, const char *crl_directory, tsi_ssl_server_handshaker_factory **handshaker_factory)
Definition: ssl_utils.cc:478
TSI_X509_PEM_CERT_PROPERTY
#define TSI_X509_PEM_CERT_PROPERTY
Definition: ssl_transport_security.h:42
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc_auth_property::name
char * name
Definition: grpc_security.h:44
grpc_auth_property_iterator
Definition: grpc_security.h:36
GRPC_X509_SUBJECT_PROPERTY_NAME
#define GRPC_X509_SUBJECT_PROPERTY_NAME
Definition: grpc_security_constants.h:31
grpc_core::DefaultSslRootStore::default_root_store_
static tsi_ssl_root_certs_store * default_root_store_
Definition: ssl_utils.h:139
grpc_ssl_roots_override_result
grpc_ssl_roots_override_result
Definition: grpc_security_constants.h:66
GRPC_SSL_ROOTS_OVERRIDE_OK
@ GRPC_SSL_ROOTS_OVERRIDE_OK
Definition: grpc_security_constants.h:67
tsi_tls_version
tsi_tls_version
Definition: transport_security_interface.h:89
grpc_set_ssl_roots_override_callback
void grpc_set_ssl_roots_override_callback(grpc_ssl_roots_override_callback cb)
Definition: ssl_utils.cc:71
grpc_ssl_check_alpn
grpc_error_handle grpc_ssl_check_alpn(const tsi_peer *peer)
Definition: ssl_utils.cc:141
grpc_auth_property::value_length
size_t value_length
Definition: grpc_security.h:46
grpc_core::SslCheckCallHost
absl::Status SslCheckCallHost(absl::string_view host, absl::string_view target_name, absl::string_view overridden_target_name, grpc_auth_context *auth_context)
Definition: ssl_utils.cc:180
tsi_result
tsi_result
Definition: transport_security_interface.h:31
GRPC_X509_CN_PROPERTY_NAME
#define GRPC_X509_CN_PROPERTY_NAME
Definition: grpc_security_constants.h:30
GRPC_SLICE_START_PTR
#define GRPC_SLICE_START_PTR(slice)
Definition: include/grpc/impl/codegen/slice.h:101
grpc_get_ssl_cipher_suites
const char * grpc_get_ssl_cipher_suites(void)
Definition: ssl_utils.cc:100
grpc_empty_slice
GPRAPI grpc_slice grpc_empty_slice(void)
Definition: slice/slice.cc:42
grpc_auth_context_add_cstring_property
GRPCAPI void grpc_auth_context_add_cstring_property(grpc_auth_context *ctx, const char *name, const char *value)
Definition: security_context.cc:268
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
grpc_ssl_client_certificate_request_type
grpc_ssl_client_certificate_request_type
Definition: grpc_security_constants.h:79
grpc_tls_version
grpc_tls_version
Definition: grpc_security_constants.h:146
tsi_peer_property::data
char * data
Definition: transport_security_interface.h:233
tsi_peer_get_property_by_name
const tsi_peer_property * tsi_peer_get_property_by_name(const tsi_peer *peer, const char *name)
Definition: transport_security.cc:369
grpc_auth_property::value
char * value
Definition: grpc_security.h:45
grpc_ssl_session_cache
struct grpc_ssl_session_cache grpc_ssl_session_cache
Definition: grpc_security.h:108
host_port.h
grpc_core::DefaultSslRootStore::default_pem_root_certs_
static grpc_slice default_pem_root_certs_
Definition: ssl_utils.h:142
GPR_ERROR
#define GPR_ERROR
Definition: include/grpc/impl/codegen/log.h:57
GRPC_PEER_EMAIL_PROPERTY_NAME
#define GRPC_PEER_EMAIL_PROPERTY_NAME
Definition: grpc_security_constants.h:51
tsi_peer_property::name
char * name
Definition: transport_security_interface.h:231
ssl_utils_config.h
grpc_core::UniquePtr
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
Definition: src/core/lib/gprpp/memory.h:43
stdint.h
GRPC_ERROR_CREATE_FROM_STATIC_STRING
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
Definition: error.h:291
alpn.h
ssl_roots_override_cb
static grpc_ssl_roots_override_callback ssl_roots_override_cb
Definition: ssl_utils.cc:69
grpc_ssl_roots_override_callback
grpc_ssl_roots_override_result(* grpc_ssl_roots_override_callback)(char **pem_root_certs)
Definition: grpc_security.h:161
grpc_auth_property
Definition: grpc_security.h:43
tsi_peer_property
Definition: transport_security_interface.h:230
grpc_auth_context_property_iterator
GRPCAPI grpc_auth_property_iterator grpc_auth_context_property_iterator(const grpc_auth_context *ctx)
Definition: security_context.cc:173
TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
@ TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
Definition: transport_security_interface.h:65
value
const char * value
Definition: hpack_parser_table.cc:165
tsi_ssl_server_handshaker_factory
Definition: ssl_transport_security.cc:102
GRPC_SECURITY_OK
@ GRPC_SECURITY_OK
Definition: security_connector.h:52
tsi_ssl_pem_key_cert_pair::private_key
const char * private_key
Definition: ssl_transport_security.h:104
TSI_SSL_SESSION_REUSED_PEER_PROPERTY
#define TSI_SSL_SESSION_REUSED_PEER_PROPERTY
Definition: ssl_transport_security.h:41
tsi_peer
Definition: transport_security_interface.h:238
grpc_core::DefaultSslRootStore::ComputePemRootCerts
static grpc_slice ComputePemRootCerts()
Definition: ssl_utils.cc:576
GRPC_X509_PEM_CERT_PROPERTY_NAME
#define GRPC_X509_PEM_CERT_PROPERTY_NAME
Definition: grpc_security_constants.h:33
security_context.h
transport_security.h
once
absl::once_flag once
Definition: bm_opencensus_plugin.cc:38
grpc_slice_from_copied_buffer
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len)
Definition: slice/slice.cc:170
global_config.h
TSI_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
@ TSI_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
Definition: transport_security_interface.h:64
installed_roots_path
static const char * installed_roots_path
Definition: ssl_utils.cc:60
grpc_core::LoadSystemRootCerts
grpc_slice LoadSystemRootCerts()
Definition: load_system_roots_fallback.cc:31
TLS1_2
@ TLS1_2
Definition: grpc_security_constants.h:146
GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
@ GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
Definition: grpc_security_constants.h:115
grpc_core::DefaultSslRootStore::InitRootStoreOnce
static void InitRootStoreOnce()
Definition: ssl_utils.cc:618
grpc_core::QsortCompare
int QsortCompare(const T &a, const T &b)
Definition: useful.h:95
tsi_ssl_session_cache
struct tsi_ssl_session_cache tsi_ssl_session_cache
Definition: ssl_transport_security.h:68
grpc_shallow_peer_destruct
void grpc_shallow_peer_destruct(tsi_peer *peer)
Definition: ssl_utils.cc:418
tsi_ssl_root_certs_store
Definition: ssl_transport_security.cc:84
tsi_result_to_string
const char * tsi_result_to_string(tsi_result result)
Definition: transport_security.cc:35
grpc_ssl_host_matches_name
int grpc_ssl_host_matches_name(const tsi_peer *peer, absl::string_view peer_name)
Definition: ssl_utils.cc:216
absl::Status
Definition: third_party/abseil-cpp/absl/status/status.h:424
GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE
@ GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE
Definition: grpc_security_constants.h:84
GRPC_ERROR_CREATE_FROM_CPP_STRING
#define GRPC_ERROR_CREATE_FROM_CPP_STRING(desc)
Definition: error.h:297
alloc.h
private_key
Definition: hrss.c:1885
absl::string_view::compare
constexpr int compare(string_view x) const noexcept
Definition: abseil-cpp/absl/strings/string_view.h:413
tsi::TlsSessionKeyLoggerCache::TlsSessionKeyLogger
Definition: ssl_key_logging.h:46
add_shallow_auth_property_to_peer
static void add_shallow_auth_property_to_peer(tsi_peer *peer, const grpc_auth_property *prop, const char *tsi_prop_name)
Definition: ssl_utils.cc:352
TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY
#define TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY
Definition: ssl_transport_security.h:38
grpc_auth_context_add_property
GRPCAPI void grpc_auth_context_add_property(grpc_auth_context *ctx, const char *name, const char *value, size_t value_length)
Definition: security_context.cc:248
ref_counted_ptr.h
grpc_get_tsi_tls_version
tsi_tls_version grpc_get_tsi_tls_version(grpc_tls_version tls_version)
Definition: ssl_utils.cc:129
grpc_get_tsi_client_certificate_request_type
tsi_client_certificate_request_type grpc_get_tsi_client_certificate_request_type(grpc_ssl_client_certificate_request_type grpc_request_type)
Definition: ssl_utils.cc:106
channel_args.h
GRPC_X509_SAN_PROPERTY_NAME
#define GRPC_X509_SAN_PROPERTY_NAME
Definition: grpc_security_constants.h:32
tsi_ssl_client_handshaker_options
Definition: ssl_transport_security.h:137
absl::string_view::empty
constexpr bool empty() const noexcept
Definition: abseil-cpp/absl/strings/string_view.h:292
GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
@ GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
Definition: grpc_security_constants.h:125
tsi_ssl_root_certs_store_create
tsi_ssl_root_certs_store * tsi_ssl_root_certs_store_create(const char *pem_roots)
Definition: ssl_transport_security.cc:1000
GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY
@ GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY
Definition: grpc_security_constants.h:68
absl::string_view::npos
static constexpr size_type npos
Definition: abseil-cpp/absl/strings/string_view.h:182
grpc_error
Definition: error_internal.h:42
size
voidpf void uLong size
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
GRPC_X509_PEM_CERT_CHAIN_PROPERTY_NAME
#define GRPC_X509_PEM_CERT_CHAIN_PROPERTY_NAME
Definition: grpc_security_constants.h:45
TSI_X509_PEM_CERT_CHAIN_PROPERTY
#define TSI_X509_PEM_CERT_CHAIN_PROPERTY
Definition: ssl_transport_security.h:43
sync.h
grpc_channel_arg_pointer_create
grpc_arg grpc_channel_arg_pointer_create(char *name, void *value, const grpc_arg_pointer_vtable *vtable)
Definition: channel_args.cc:492
TSI_X509_EMAIL_PEER_PROPERTY
#define TSI_X509_EMAIL_PEER_PROPERTY
Definition: ssl_transport_security.h:47
GRPC_SSL_SESSION_CACHE_ARG
#define GRPC_SSL_SESSION_CACHE_ARG
Definition: grpc_types.h:282
TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY
#define TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY
Definition: ssl_transport_security.h:39
GRPC_PEER_URI_PROPERTY_NAME
#define GRPC_PEER_URI_PROPERTY_NAME
Definition: grpc_security_constants.h:50
grpc_ssl_tsi_client_handshaker_factory_init
grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(tsi_ssl_pem_key_cert_pair *pem_key_cert_pair, const char *pem_root_certs, bool skip_server_certificate_verification, tsi_tls_version min_tls_version, tsi_tls_version max_tls_version, tsi_ssl_session_cache *ssl_session_cache, tsi::TlsSessionKeyLoggerCache::TlsSessionKeyLogger *tls_session_key_logger, const char *crl_directory, tsi_ssl_client_handshaker_factory **handshaker_factory)
Definition: ssl_utils.cc:422
grpc_security_status
grpc_security_status
Definition: security_connector.h:52
cb
OPENSSL_EXPORT pem_password_cb * cb
Definition: pem.h:351
ssl_utils.h
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
tsi_peer::property_count
size_t property_count
Definition: transport_security_interface.h:240
tsi_ssl_session_cache_create_lru
tsi_ssl_session_cache * tsi_ssl_session_cache_create_lru(size_t capacity)
Definition: ssl_transport_security.cc:1037
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:21