【发布时间】:2019-05-29 17:18:29
【问题描述】:
什么是 Java 的 InsecureTrustManagerFactory 的 grpc C++ 等价物?
GrpcSslContexts.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build()
一个不安全的 TrustManagerFactory,它信任所有 X.509 证书而无需任何验证。
换句话说 - 在 Java 中,我创建了一个服务器(由 rootCA 签名的 private.key + certificate.pem)和一个创建 SSL 加密通道的客户端,服务器接受服务器的证书而无需验证(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] 握手失败,出现致命错误 SSL_ERROR_SSL:错误:0400006b:RSA 例程:OPENSSL_internal:BLOCK_TYPE_IS_NOT_01。
【问题讨论】:
-
我很好奇; 为什么你会想要只是盲目地接受任何证书?好的,在测试代码中,也许。但在生产中,肯定不是。还是?
-
因为这是我老板想要的。他是给我的薪水签字的人。无论如何,如果它在 Java gRPC 中是可行的,你会如何在 C++ 中做到这一点?
-
一个负责任的工程师在犯明显错误时提出问题他的老板的决定,而不是只是翻身照他说的做。
-
但是 Java 中添加了一些规定来完成它。你知道如何在 C++ 中做同样的事情吗?
-
没有。我不知道直接的 C++ 等价物。我会可能从研究 OpenSSL 开始。