Java 的 InsecureTrustManagerFactory 的 grpc C++ 等价物是什么?
GrpcSslContexts.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build()
一个不安全的 TrustManagerFactory,它信任所有 X.509 证书而无需任何验证。
换句话说 - 在 Java 中,我创建了一个服务器(private.key + certificate.pem 由 rootCA 签名)和一个创建 SSL 加密 channel 的客户端,服务器接受服务器的证书而无需验证(rootCA.pem 不适用于客户端)。技术上不推荐,但我仅将其用于测试目的。我需要为我的服务器-客户端对的 C++ 版本做同样的事情。到目前为止,我的 C++ 客户端通过 SslCredentialsOptions 需要 rootCA.pem:
grpc::SslCredentialsOptions sslChannelOptions;
sslChannelOptions.pem_root_certs = "rootCA.pem";
sslChannelOptions.pem_cert_chain = "";
sslChannelOptions.pem_private_key = "";
return grpc::SslCredentials( sslChannelOptions );
或通过
gpr_setenv("GRPC_DEFAULT_SSL_ROOTS_FILE_PATH", "roots.pem")
否则我得到:
ssl_transport_security.c:921] 握手失败,出现 fatal error SSL_ERROR_SSL:错误:0400006b:RSA 例程:OPENSSL_internal:BLOCK_TYPE_IS_NOT_01。
最佳答案
遗憾的是,gRPC C++ 不支持此功能。 gRPC C++ 只有不验证客户端证书而不验证服务器证书的选项。
您的用例似乎不足以让我们支持此功能。
关于java - 如何使 C++ 客户端信任所有 X.509 证书而不进行任何验证(就像在 Java 中一样),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56365638/