c++ - 如何禁用客户端 GRPC 服务器证书主机名验证?

标签 c++ ssl grpc

目前我正在为我的 gRPC 客户端设置 channel 身份验证,如下所示:

std::shared_ptr<grpc::ChannelCredentials> channel_creds;
auto metadata = grpc::ChannelArguments();

// ...
grpc::SslCredentialsOptions sslOpts{};
sslOpts.pem_root_certs = // PEM with the Root CA cert's public key
sslOpts.pem_cert_chain = // PEM for client cert's public key
sslOpts.pem_private_key = // PEM for client cert's private key

channel_creds = grpc::SslCredentials(sslOpts);
metadata.SetSslTargetNameOverride(mbServerCertSubjectName.second.get());

// ...
grpc::CreateCustomChannel(addr_str, channel_creds, metadata);
这几乎是完美的,但我想禁用证书名称验证:我只想接受任何东西,只要它链接到 pem_root_certs我提供的。
如果我可以创建 TlsChannelCredentialsOptions,这似乎是可以实现的。结构及其 grpc_tls_server_verification_option字段设置为 GRPC_TLS_SKIP_HOSTNAME_VERIFICATION,但接口(interface)为 TlsCredentialsOptions与 SslCredentialsOptions 完全不同,我不知道如何设置它以根据我在此处提供给 sslOpts 的 PEM 文件进行身份验证。
如何将我想要的逻辑转换为 TlsChannelCredentialsOptions?

最佳答案

试试这个:

grpc::ChannelArguments gargs;
gargs.SetSslTargetNameOverride("domian name you want to ignore");

client client(grpc::CreateCustomChannel("ipverson:xxx.xxx.xxx.xxx:port", ssl_creds, gargs));

关于c++ - 如何禁用客户端 GRPC 服务器证书主机名验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68305089/

相关文章:

grpc - grpc服务是否必须只有一个输入参数和一个返回值

c++ - 使用 CMake 为 C++ 构建协议(protocol)

c++ - 非特化模板参数的模板特化

c++ - 在C++中对π的莱布尼兹求和的计数迭代

ssl - 如何判断一个网站使用的是CA证书还是SSL证书?

java - Google App Engine 新的免费 SNI SSL 服务说明

gRPC (Cpp) 流 - 如果一侧在 grpc_impl::ServerReaderWriter::Read 期间挂起或忘记关闭流,会发生什么情况?

c++ - 在 Ubuntu 中通过终端运行 C++ 时遇到问题

python - 如何使用 Cython 将 python 函数作为参数传递给 c++ 函数

http - nginx 将每个 http 请求重定向到 https