Skip to content

Commit 9d2b7fe

Browse files
Support grpc_ssl_target_name_override for grpc-web nginx gateway
1 parent 3ea2ea4 commit 9d2b7fe

File tree

5 files changed

+20
-6
lines changed

5 files changed

+20
-6
lines changed

net/grpc/gateway/backend/grpc_backend.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ GrpcBackend::~GrpcBackend() {
9191

9292
grpc_channel* GrpcBackend::CreateChannel() {
9393
return Runtime::Get().GetBackendChannel(
94-
address_, use_shared_channel_pool_, ssl_, ssl_pem_root_certs_,
95-
ssl_pem_private_key_, ssl_pem_cert_chain_);
94+
address_, use_shared_channel_pool_, ssl_, ssl_target_override_,
95+
ssl_pem_root_certs_, ssl_pem_private_key_, ssl_pem_cert_chain_);
9696
}
9797

9898
grpc_call* GrpcBackend::CreateCall() {

net/grpc/gateway/backend/grpc_backend.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ class GrpcBackend : public Backend {
5050
use_shared_channel_pool_ = use_shared_channel_pool;
5151
}
5252
void set_ssl(bool ssl) { ssl_ = ssl; }
53+
void set_ssl_target_override(const string& ssl_target_override) {
54+
ssl_target_override_ = ssl_target_override;
55+
}
5356
void set_ssl_pem_root_certs(const string& ssl_pem_root_certs) {
5457
ssl_pem_root_certs_ = ssl_pem_root_certs;
5558
}
@@ -83,6 +86,8 @@ class GrpcBackend : public Backend {
8386
bool use_shared_channel_pool_;
8487
// True if ssl should be used.
8588
bool ssl_;
89+
// The GRPC SSL target override.
90+
string ssl_target_override_;
8691
// The file location which contains the root certs in pem format.
8792
string ssl_pem_root_certs_;
8893
// The file location which contains the client private key in pem format.

net/grpc/gateway/frontend/nginx_http_frontend.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ ngx_int_t grpc_gateway_handler(ngx_http_request_t *r) {
8686
std::string backend_host(reinterpret_cast<char *>(r->host_start),
8787
r->host_end - r->host_start);
8888
std::string backend_method(reinterpret_cast<char *>(r->uri.data), r->uri.len);
89+
std::string backend_ssl_target_name_override(
90+
reinterpret_cast<char *>(mlcf->grpc_ssl_target_name_override.data),
91+
mlcf->grpc_ssl_target_name_override.len);
8992
std::string backend_ssl_pem_root_certs(
9093
reinterpret_cast<char *>(mlcf->grpc_ssl_pem_root_certs.data),
9194
mlcf->grpc_ssl_pem_root_certs.len);
@@ -106,7 +109,8 @@ ngx_int_t grpc_gateway_handler(ngx_http_request_t *r) {
106109
context->frontend = grpc::gateway::Runtime::Get().CreateNginxFrontend(
107110
r, backend_address, backend_host, backend_method,
108111
mlcf->grpc_channel_reuse, mlcf->grpc_client_liveness_detection_interval,
109-
mlcf->grpc_ssl, backend_ssl_pem_root_certs, backend_ssl_pem_private_key,
112+
mlcf->grpc_ssl, backend_ssl_target_name_override,
113+
backend_ssl_pem_root_certs, backend_ssl_pem_private_key,
110114
backend_ssl_pem_cert_chain);
111115
ngx_http_set_ctx(r, context, grpc_gateway_module);
112116
ngx_pool_cleanup_t *http_cleanup =

net/grpc/gateway/runtime/runtime.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ std::shared_ptr<Frontend> Runtime::CreateNginxFrontend(
123123
const string& backend_host, const string& backend_method,
124124
const ngx_flag_t& channel_reuse,
125125
const ngx_msec_t& client_liveness_detection_interval,
126-
const ngx_flag_t& backend_ssl, const string& backend_ssl_pem_root_certs,
126+
const ngx_flag_t& backend_ssl, const string& backend_ssl_target_override,
127+
const string& backend_ssl_pem_root_certs,
127128
const string& backend_ssl_pem_private_key,
128129
const string& backend_ssl_pem_cert_chain) {
129130
std::unique_ptr<GrpcBackend> backend(new GrpcBackend());
@@ -134,6 +135,7 @@ std::shared_ptr<Frontend> Runtime::CreateNginxFrontend(
134135
backend->set_use_shared_channel_pool(true);
135136
}
136137
backend->set_ssl(backend_ssl);
138+
backend->set_ssl_target_override(backend_ssl_target_override);
137139
backend->set_ssl_pem_root_certs(backend_ssl_pem_root_certs);
138140
backend->set_ssl_pem_private_key(backend_ssl_pem_private_key);
139141
backend->set_ssl_pem_cert_chain(backend_ssl_pem_cert_chain);
@@ -331,6 +333,7 @@ Protocol Runtime::DetectResponseProtocol(ngx_http_request_t* http_request) {
331333

332334
grpc_channel* Runtime::GetBackendChannel(
333335
const std::string& backend_address, bool use_shared_channel_pool, bool ssl,
336+
const std::string& ssl_target_override,
334337
const std::string& ssl_pem_root_certs,
335338
const std::string& ssl_pem_private_key,
336339
const std::string& ssl_pem_cert_chain) {
@@ -347,7 +350,7 @@ grpc_channel* Runtime::GetBackendChannel(
347350
grpc_arg arg_ssl_target;
348351
arg_ssl_target.type = GRPC_ARG_STRING;
349352
arg_ssl_target.key = const_cast<char*>(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG);
350-
arg_ssl_target.value.string = const_cast<char*>("grpc.test.google.fr");
353+
arg_ssl_target.value.string = const_cast<char*>(ssl_target_override.c_str());
351354

352355
grpc_arg args[] = {arg_max_message_length, arg_ssl_target};
353356
grpc_channel_args channel_args;

net/grpc/gateway/runtime/runtime.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ class Runtime {
6161
const string &host, const string &backend_method,
6262
const ngx_flag_t &channel_reuse,
6363
const ngx_msec_t &client_liveness_detection_interval,
64-
const ngx_flag_t &backend_ssl, const string &backend_ssl_pem_root_certs,
64+
const ngx_flag_t &backend_ssl, const string &backend_ssl_target_override,
65+
const string &backend_ssl_pem_root_certs,
6566
const string &backend_ssl_pem_private_key,
6667
const string &backend_ssl_pem_cert_chain);
6768

@@ -74,6 +75,7 @@ class Runtime {
7475
// channel if needed.
7576
grpc_channel *GetBackendChannel(const std::string &backend_address,
7677
bool use_shared_channel_pool, bool ssl,
78+
const std::string &ssl_target_override,
7779
const std::string &ssl_pem_root_certs,
7880
const std::string &ssl_pem_private_key,
7981
const std::string &ssl_pem_cert_chain);

0 commit comments

Comments
 (0)