简体   繁体   English

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

[英]How to disable client-side GRPC server cert hostname validation?

Currently I'm setting up the channel authentication for my gRPC client as follows:目前我正在为我的 gRPC 客户端设置通道身份验证,如下所示:

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);

This is almost perfect, but I'd like to disable the certificate name validation: I'd just like to accept anything as long as it chains to the pem_root_certs that I provide.这几乎是完美的,但我想禁用证书名称验证:我只想接受任何东西,只要它链接到我提供的pem_root_certs

This seems achievable if I could create a TlsChannelCredentialsOptions struct with its grpc_tls_server_verification_option field set to GRPC_TLS_SKIP_HOSTNAME_VERIFICATION, but the interface for TlsCredentialsOptions is totally different from SslCredentialsOptions and I don't know how to set it up to authenticate based on the PEM files that I'm providing to sslOpts here.如果我可以创建一个TlsChannelCredentialsOptions结构并将其grpc_tls_server_verification_option字段设置为 GRPC_TLS_SKIP_HOSTNAME_VERIFICATION,这似乎是可以实现的,但是 TlsCredentialsOptions 的接口与SslCredentialsOptions完全不同,我不知道如何设置它以根据我的 PEM 文件进行身份验证在此处提供给 sslOpts。

How can I translate my desired logic over to TlsChannelCredentialsOptions?如何将我想要的逻辑转换为 TlsChannelCredentialsOptions?

try this one:试试这个:

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM