tls_credentials.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2018 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 <cstring>
24 #include <utility>
25 
26 #include "absl/strings/string_view.h"
27 
28 #include <grpc/grpc.h>
30 #include <grpc/support/log.h>
31 
38 
39 namespace {
40 
41 bool CredentialOptionSanityCheck(grpc_tls_credentials_options* options,
42  bool is_client) {
43  if (options == nullptr) {
44  gpr_log(GPR_ERROR, "TLS credentials options is nullptr.");
45  return false;
46  }
47  // In the following conditions, there won't be any issues, but it might
48  // indicate callers are doing something wrong with the API.
49  if (is_client && options->cert_request_type() !=
52  "Client's credentials options should not set cert_request_type.");
53  }
54  if (!is_client && !options->verify_server_cert()) {
56  "Server's credentials options should not set verify_server_cert.");
57  }
58  // In the following conditions, there could be severe security issues.
59  if (is_client && options->certificate_verifier() == nullptr) {
60  // If no verifier is specified on the client side, use the hostname verifier
61  // as default. Users who want to bypass all the verifier check should
62  // implement an external verifier instead.
64  "No verifier specified on the client side. Using default hostname "
65  "verifier");
66  options->set_certificate_verifier(
67  grpc_core::MakeRefCounted<grpc_core::HostNameCertificateVerifier>());
68  }
69  return true;
70 }
71 
72 } // namespace
73 
76  : options_(std::move(options)) {}
77 
79 
83  const char* target_name, const grpc_channel_args* args,
84  grpc_channel_args** new_args) {
85  const char* overridden_target_name = nullptr;
86  tsi_ssl_session_cache* ssl_session_cache = nullptr;
87  for (size_t i = 0; args != nullptr && i < args->num_args; i++) {
88  grpc_arg* arg = &args->args[i];
89  if (strcmp(arg->key, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG) == 0 &&
90  arg->type == GRPC_ARG_STRING) {
91  overridden_target_name = arg->value.string;
92  }
93  if (strcmp(arg->key, GRPC_SSL_SESSION_CACHE_ARG) == 0 &&
95  ssl_session_cache =
96  static_cast<tsi_ssl_session_cache*>(arg->value.pointer.p);
97  }
98  }
101  this->Ref(), options_, std::move(call_creds), target_name,
102  overridden_target_name, ssl_session_cache);
103  if (sc == nullptr) {
104  return nullptr;
105  }
106  if (args != nullptr) {
108  const_cast<char*>(GRPC_ARG_HTTP2_SCHEME), const_cast<char*>("https"));
109  *new_args = grpc_channel_args_copy_and_add(args, &new_arg, 1);
110  }
111  return sc;
112 }
113 
115  static grpc_core::UniqueTypeName::Factory kFactory("Tls");
116  return kFactory.Create();
117 }
118 
120  const TlsCredentials* o = static_cast<const TlsCredentials*>(other);
121  if (*options_ == *o->options_) return 0;
123  static_cast<const grpc_channel_credentials*>(this), other);
124 }
125 
128  : options_(std::move(options)) {}
129 
131 
134  const grpc_channel_args* /* args */) {
137 }
138 
140  static grpc_core::UniqueTypeName::Factory kFactory("Tls");
141  return kFactory.Create();
142 }
143 
148  if (!CredentialOptionSanityCheck(options, true /* is_client */)) {
149  return nullptr;
150  }
151  return new TlsCredentials(
153 }
154 
157  if (!CredentialOptionSanityCheck(options, false /* is_client */)) {
158  return nullptr;
159  }
160  return new TlsServerCredentials(
162 }
grpc_arg
Definition: grpc_types.h:103
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
grpc_core::UniqueTypeName::Factory::Create
UniqueTypeName Create()
Definition: unique_type_name.h:67
tls_credentials.h
log.h
TlsCredentials
Definition: tls_credentials.h:33
grpc_core::TlsChannelSecurityConnector::CreateTlsChannelSecurityConnector
static RefCountedPtr< grpc_channel_security_connector > CreateTlsChannelSecurityConnector(RefCountedPtr< grpc_channel_credentials > channel_creds, RefCountedPtr< grpc_tls_credentials_options > options, RefCountedPtr< grpc_call_credentials > request_metadata_creds, const char *target_name, const char *overridden_target_name, tsi_ssl_session_cache *ssl_session_cache)
Definition: tls_security_connector.cc:231
GRPC_ARG_STRING
@ GRPC_ARG_STRING
Definition: grpc_types.h:80
options
double_dict options[]
Definition: capstone_test.c:55
useful.h
arg::value
void * value
Definition: cmdline.cc:44
grpc_channel_arg_string_create
grpc_arg grpc_channel_arg_string_create(char *name, char *value)
Definition: channel_args.cc:476
TlsServerCredentials::type
grpc_core::UniqueTypeName type() const override
Definition: tls_credentials.cc:139
ssl_transport_security.h
TlsServerCredentials::create_security_connector
grpc_core::RefCountedPtr< grpc_server_security_connector > create_security_connector(const grpc_channel_args *) override
Definition: tls_credentials.cc:133
grpc_channel_args
Definition: grpc_types.h:132
grpc_tls_credentials_create
grpc_channel_credentials * grpc_tls_credentials_create(grpc_tls_credentials_options *options)
Definition: tls_credentials.cc:146
TlsServerCredentials::TlsServerCredentials
TlsServerCredentials(grpc_core::RefCountedPtr< grpc_tls_credentials_options > options)
Definition: tls_credentials.cc:126
o
UnboundConversion o
Definition: third_party/abseil-cpp/absl/strings/internal/str_format/parser_test.cc:97
arg::type
argtype type
Definition: cmdline.cc:43
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
TlsServerCredentials::options_
grpc_core::RefCountedPtr< grpc_tls_credentials_options > options_
Definition: tls_credentials.h:69
grpc_tls_certificate_verifier.h
grpc_core::RefCountedPtr< grpc_tls_credentials_options >
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG
#define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG
Definition: grpc_types.h:278
grpc_core::TlsServerSecurityConnector::CreateTlsServerSecurityConnector
static RefCountedPtr< grpc_server_security_connector > CreateTlsServerSecurityConnector(RefCountedPtr< grpc_server_credentials > server_creds, RefCountedPtr< grpc_tls_credentials_options > options)
Definition: tls_security_connector.cc:561
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc::experimental::TlsServerCredentials
std::shared_ptr< ServerCredentials > TlsServerCredentials(const experimental::TlsServerCredentialsOptions &options)
Builds TLS ServerCredentials given TLS options.
Definition: secure_server_credentials.cc:153
grpc.h
grpc_tls_server_credentials_create
grpc_server_credentials * grpc_tls_server_credentials_create(grpc_tls_credentials_options *options)
Definition: tls_credentials.cc:155
call_creds
void call_creds(grpc_end2end_test_config config)
Definition: call_creds.cc:523
arg
Definition: cmdline.cc:40
GPR_ERROR
#define GPR_ERROR
Definition: include/grpc/impl/codegen/log.h:57
TlsServerCredentials::~TlsServerCredentials
~TlsServerCredentials() override
Definition: tls_credentials.cc:130
TlsCredentials::create_security_connector
grpc_core::RefCountedPtr< grpc_channel_security_connector > create_security_connector(grpc_core::RefCountedPtr< grpc_call_credentials > call_creds, const char *target_name, const grpc_channel_args *args, grpc_channel_args **new_args) override
Definition: tls_credentials.cc:81
TlsCredentials::TlsCredentials
TlsCredentials(grpc_core::RefCountedPtr< grpc_tls_credentials_options > options)
Definition: tls_credentials.cc:74
GRPC_ARG_HTTP2_SCHEME
#define GRPC_ARG_HTTP2_SCHEME
Definition: grpc_types.h:222
grpc_server_credentials
Definition: src/core/lib/security/credentials/credentials.h:259
TlsCredentials::type
grpc_core::UniqueTypeName type() const override
Definition: tls_credentials.cc:114
grpc::experimental::TlsCredentials
std::shared_ptr< ChannelCredentials > TlsCredentials(const TlsChannelCredentialsOptions &options)
Builds TLS Credentials given TLS options.
Definition: secure_credentials.cc:316
grpc_core::UniqueTypeName
Definition: unique_type_name.h:56
grpc_tls_credentials_options.h
options_
DebugStringOptions options_
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.cc:2390
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_SSL_DONT_REQUEST_CLIENT_CERTIFICATE
@ GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE
Definition: grpc_security_constants.h:84
std
Definition: grpcpp/impl/codegen/async_unary_call.h:407
grpc_tls_credentials_options
Definition: grpc_tls_credentials_options.h:39
TlsCredentials::cmp_impl
int cmp_impl(const grpc_channel_credentials *other) const override
Definition: tls_credentials.cc:119
grpc_security_constants.h
channel_args.h
TlsCredentials::~TlsCredentials
~TlsCredentials() override
Definition: tls_credentials.cc:78
tls_security_connector.h
GRPC_ARG_POINTER
@ GRPC_ARG_POINTER
Definition: grpc_types.h:82
TlsCredentials::options_
grpc_core::RefCountedPtr< grpc_tls_credentials_options > options_
Definition: tls_credentials.h:52
grpc_core::UniqueTypeName::Factory
Definition: unique_type_name.h:60
GRPC_SSL_SESSION_CACHE_ARG
#define GRPC_SSL_SESSION_CACHE_ARG
Definition: grpc_types.h:282
grpc_channel_credentials
Definition: src/core/lib/security/credentials/credentials.h:96
grpc_channel_args_copy_and_add
grpc_channel_args * grpc_channel_args_copy_and_add(const grpc_channel_args *src, const grpc_arg *to_add, size_t num_to_add)
Definition: channel_args.cc:224
grpc_core::RefCounted< grpc_channel_credentials >::Ref
RefCountedPtr< grpc_channel_credentials > Ref() GRPC_MUST_USE_RESULT
Definition: ref_counted.h:287
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
port_platform.h


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:39