Go to the documentation of this file.
29 #include "absl/strings/match.h"
30 #include "absl/strings/str_cat.h"
31 #include "absl/strings/str_split.h"
54 #if defined(GRPC_ROOT_PEM_PATH)
56 #elif defined(INSTALL_PREFIX)
58 INSTALL_PREFIX
"/usr/share/grpc/roots.pem";
63 #ifndef TSI_OPENSSL_ALPN_SUPPORT
64 #define TSI_OPENSSL_ALPN_SUPPORT 1
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")
92 static
void init_cipher_suites(
void) {
108 switch (grpc_request_type) {
130 switch (tls_version) {
142 #if TSI_OPENSSL_ALPN_SUPPORT
148 "Cannot check peer: missing selected ALPN property.");
152 "Cannot check peer: invalid ALPN value.");
163 absl::StrCat(
"Peer name ", peer_name,
" is not in peer certificate"));
169 size_t num_key_cert_pairs) {
170 if (kp ==
nullptr)
return;
171 for (
size_t i = 0;
i < num_key_cert_pairs;
i++) {
173 gpr_free(
const_cast<char*
>(kp[
i].cert_chain));
190 if (!overridden_target_name.
empty() && host == target_name) {
197 "call host does not match SSL server name");
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++) {
213 return alpn_protocol_strings;
221 if (allocated_name.
empty())
return 0;
224 const size_t zone_id = allocated_name.
find(
'%');
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);
245 if (uri.
size() > 2048) {
250 if (splits.size() < 4 || splits[3].empty()) {
254 if (splits[2].
size() > 255) {
255 gpr_log(
GPR_INFO,
"Invalid SPIFFE ID: domain longer than 255 characters.");
262 const tsi_peer* peer,
const char* transport_security_type) {
264 const char* peer_identity_property_name =
nullptr;
269 grpc_core::MakeRefCounted<grpc_auth_context>(
nullptr);
272 transport_security_type);
273 const char* spiffe_data =
nullptr;
274 size_t spiffe_length = 0;
276 bool has_spiffe_id =
false;
279 if (prop->
name ==
nullptr)
continue;
286 if (peer_identity_property_name ==
nullptr) {
291 }
else if (strcmp(prop->
name,
323 has_spiffe_id =
true;
333 if (peer_identity_property_name !=
nullptr) {
335 ctx.get(), peer_identity_property_name) == 1);
339 if (uri_count == 1) {
344 spiffe_data, spiffe_length);
354 const char* tsi_prop_name) {
356 tsi_prop->
name =
const_cast<char*
>(tsi_prop_name);
363 size_t max_num_props = 0;
367 memset(&peer, 0,
sizeof(peer));
372 if (max_num_props > 0) {
389 }
else if (strcmp(prop->
name,
424 bool skip_server_certificate_verification,
tsi_tls_version min_tls_version,
427 const char* crl_directory,
429 const char* root_certs;
433 "No root certificates specified; use ones stored in system default "
434 "locations instead");
437 if (root_certs ==
nullptr) {
444 root_store =
nullptr;
446 bool has_key_cert_pair = pem_key_cert_pair !=
nullptr &&
451 options.pem_root_certs = root_certs;
452 options.root_store = root_store;
455 if (has_key_cert_pair) {
456 options.pem_key_cert_pair = pem_key_cert_pair;
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;
484 const char* crl_directory,
486 size_t num_alpn_protocols = 0;
487 const char** alpn_protocol_strings =
490 options.pem_key_cert_pairs = pem_key_cert_pairs;
491 options.num_key_cert_pairs = num_key_cert_pairs;
493 options.client_certificate_request =
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;
572 :
reinterpret_cast<const char*
>
578 const bool not_use_system_roots =
583 if (strlen(default_root_certs_path.get()) > 0) {
strings_internal::Splitter< typename strings_internal::SelectDelimiter< Delimiter >::type, AllowEmpty, absl::string_view > StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d)
#define GRPC_PEER_DNS_PROPERTY_NAME
#define GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME
@ TSI_DONT_REQUEST_CLIENT_CERTIFICATE
grpc_error_handle grpc_ssl_check_peer_name(absl::string_view peer_name, const tsi_peer *peer)
tsi_result tsi_create_ssl_server_handshaker_factory_with_options(const tsi_ssl_server_handshaker_options *options, tsi_ssl_server_handshaker_factory **factory)
const char ** grpc_fill_alpn_protocol_strings(size_t *num_alpn_protocols)
static const grpc_transport_vtable vtable
tsi_peer_property * properties
struct tsi_peer_property::@48 value
grpc_ssl_session_cache * grpc_ssl_session_cache_create_lru(size_t capacity)
grpc_error_handle grpc_load_file(const char *filename, int add_null_terminator, grpc_slice *output)
ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR void remove_suffix(size_type n)
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
tsi_result tsi_create_ssl_client_handshaker_factory_with_options(const tsi_ssl_client_handshaker_options *options, tsi_ssl_client_handshaker_factory **factory)
return memset(p, 0, total)
#define GPR_DEBUG_ASSERT(x)
int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size)
#define TSI_SSL_ALPN_SELECTED_PROTOCOL
static char * pem_root_certs
#define TSI_X509_SUBJECT_PEER_PROPERTY
#define GPR_GLOBAL_CONFIG_GET(name)
#define TSI_X509_IP_PEER_PROPERTY
static gpr_once cipher_suites_once
size_type find(string_view s, size_type pos=0) const noexcept
grpc_core::RefCountedPtr< grpc_auth_context > grpc_ssl_peer_to_auth_context(const tsi_peer *peer, const char *transport_security_type)
static void grpc_ssl_session_cache_arg_destroy(void *p)
#define TSI_SECURITY_LEVEL_PEER_PROPERTY
#define GRPC_SSL_SESSION_REUSED_PROPERTY
void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache *cache)
bool StartsWith(absl::string_view text, absl::string_view prefix) noexcept
const char * grpc_chttp2_get_alpn_version_index(size_t i)
GPRAPI void gpr_free(void *ptr)
void tsi_ssl_session_cache_unref(tsi_ssl_session_cache *cache)
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)
GPRAPI void * gpr_malloc(size_t size)
@ GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
bool SplitHostPort(absl::string_view name, absl::string_view *host, absl::string_view *port)
@ TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
static struct test_ctx ctx
#define GRPC_LOG_IF_ERROR(what, error)
static const char * GetPemRootCerts()
static int grpc_ssl_session_cache_arg_cmp(void *p, void *q)
static bool IsSpiffeId(absl::string_view uri)
static const char * cipher_suites
static void * grpc_ssl_session_cache_arg_copy(void *p)
const GRPCAPI grpc_auth_property * grpc_auth_property_iterator_next(grpc_auth_property_iterator *it)
@ TSI_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
static void InitRootStore()
@ GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
GPRAPI void gpr_once_init(gpr_once *once, void(*init_function)(void))
#define TSI_X509_URI_PEER_PROPERTY
grpc_arg grpc_ssl_session_cache_create_channel_arg(grpc_ssl_session_cache *cache)
Status UnauthenticatedError(absl::string_view message)
static const tsi_ssl_root_certs_store * GetRootStore()
GRPCAPI int grpc_auth_context_set_peer_identity_property_name(grpc_auth_context *ctx, const char *name)
#define TSI_X509_DNS_PEER_PROPERTY
#define GRPC_PEER_IP_PROPERTY_NAME
size_t grpc_chttp2_num_alpn_versions(void)
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)
#define GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME
void tsi_ssl_session_cache_ref(tsi_ssl_session_cache *cache)
#define GRPC_PEER_SPIFFE_ID_PROPERTY_NAME
tsi_client_certificate_request_type
constexpr size_type size() const noexcept
int tsi_ssl_peer_matches_name(const tsi_peer *peer, absl::string_view name)
tsi_peer grpc_shallow_peer_from_ssl_auth_context(const grpc_auth_context *auth_context)
@ GRPC_SSL_ROOTS_OVERRIDE_FAIL
void grpc_tsi_ssl_pem_key_cert_pairs_destroy(tsi_ssl_pem_key_cert_pair *kp, size_t num_key_cert_pairs)
#define GRPC_SLICE_IS_EMPTY(slice)
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)
#define TSI_X509_PEM_CERT_PROPERTY
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
#define GRPC_X509_SUBJECT_PROPERTY_NAME
static tsi_ssl_root_certs_store * default_root_store_
grpc_ssl_roots_override_result
@ GRPC_SSL_ROOTS_OVERRIDE_OK
void grpc_set_ssl_roots_override_callback(grpc_ssl_roots_override_callback cb)
grpc_error_handle grpc_ssl_check_alpn(const tsi_peer *peer)
absl::Status SslCheckCallHost(absl::string_view host, absl::string_view target_name, absl::string_view overridden_target_name, grpc_auth_context *auth_context)
#define GRPC_X509_CN_PROPERTY_NAME
#define GRPC_SLICE_START_PTR(slice)
const char * grpc_get_ssl_cipher_suites(void)
GPRAPI grpc_slice grpc_empty_slice(void)
GRPCAPI void grpc_auth_context_add_cstring_property(grpc_auth_context *ctx, const char *name, const char *value)
grpc_ssl_client_certificate_request_type
const tsi_peer_property * tsi_peer_get_property_by_name(const tsi_peer *peer, const char *name)
struct grpc_ssl_session_cache grpc_ssl_session_cache
static grpc_slice default_pem_root_certs_
#define GRPC_PEER_EMAIL_PROPERTY_NAME
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
static grpc_ssl_roots_override_callback ssl_roots_override_cb
grpc_ssl_roots_override_result(* grpc_ssl_roots_override_callback)(char **pem_root_certs)
GRPCAPI grpc_auth_property_iterator grpc_auth_context_property_iterator(const grpc_auth_context *ctx)
@ TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
#define TSI_SSL_SESSION_REUSED_PEER_PROPERTY
static grpc_slice ComputePemRootCerts()
#define GRPC_X509_PEM_CERT_PROPERTY_NAME
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len)
@ TSI_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
static const char * installed_roots_path
grpc_slice LoadSystemRootCerts()
@ GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
static void InitRootStoreOnce()
int QsortCompare(const T &a, const T &b)
struct tsi_ssl_session_cache tsi_ssl_session_cache
void grpc_shallow_peer_destruct(tsi_peer *peer)
const char * tsi_result_to_string(tsi_result result)
int grpc_ssl_host_matches_name(const tsi_peer *peer, absl::string_view peer_name)
@ GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE
#define GRPC_ERROR_CREATE_FROM_CPP_STRING(desc)
constexpr int compare(string_view x) const noexcept
static void add_shallow_auth_property_to_peer(tsi_peer *peer, const grpc_auth_property *prop, const char *tsi_prop_name)
#define TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY
GRPCAPI void grpc_auth_context_add_property(grpc_auth_context *ctx, const char *name, const char *value, size_t value_length)
tsi_tls_version grpc_get_tsi_tls_version(grpc_tls_version tls_version)
tsi_client_certificate_request_type grpc_get_tsi_client_certificate_request_type(grpc_ssl_client_certificate_request_type grpc_request_type)
#define GRPC_X509_SAN_PROPERTY_NAME
constexpr bool empty() const noexcept
@ GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
tsi_ssl_root_certs_store * tsi_ssl_root_certs_store_create(const char *pem_roots)
@ GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY
static constexpr size_type npos
#define GRPC_X509_PEM_CERT_CHAIN_PROPERTY_NAME
#define TSI_X509_PEM_CERT_CHAIN_PROPERTY
grpc_arg grpc_channel_arg_pointer_create(char *name, void *value, const grpc_arg_pointer_vtable *vtable)
#define TSI_X509_EMAIL_PEER_PROPERTY
#define GRPC_SSL_SESSION_CACHE_ARG
#define TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY
#define GRPC_PEER_URI_PROPERTY_NAME
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)
OPENSSL_EXPORT pem_password_cb * cb
tsi_ssl_session_cache * tsi_ssl_session_cache_create_lru(size_t capacity)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:21