本文介绍了如何禁用客户端GRPC服务器证书主机名验证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
目前我正在为我的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);
这几乎是完美的,但我想禁用证书名称验证:我只想接受任何链接到我提供的pem_root_certs
的内容。
如果我可以创建TlsChannelCredentialsOptions结构并将其grpc_tls_server_verification_option字段设置为GRPC_TLS_SKIP_HOSTNAME_VERIFICATION,但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));
这篇关于如何禁用客户端GRPC服务器证书主机名验证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!