【问题标题】:How to make C++ client trust all X.509 certificates without any verification (like in Java)如何使 C++ 客户端信任所有 X.509 证书而无需任何验证(如在 Java 中)
【发布时间】: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 开始。

标签: java c++ ssl grpc


【解决方案1】:

很遗憾,gRPC C++ 不支持此功能。 gRPC C++ 仅具有不验证客户端证书但不验证服务器证书的选项。

您的用例似乎不足以让我们支持此功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2014-02-14
    • 2020-10-29
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多