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