Как отключить проверку имени хоста сертификата GRPC-сервера на стороне клиента?

#c #ssl #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, и я не знаю, как настроить его для аутентификации на основе файлов PEM, которые я предоставляю sslOpts здесь.

Как я могу перевести желаемую логику в TlsChannelCredentialsOptions?

Ответ №1:

попробуйте вот это:

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

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