ssl - 在 gRPC TLS 中禁用证书检查

标签 ssl ssl-certificate netty tls1.2 grpc

目前,我有一个 ngnix 服务器(在端口 5001 上),其后运行着一个 gRPC 服务器,nginx 启用了 TLS。所有 gRPC 客户端都需要将请求发送到 nginx 端口,该端口转发到运行的 gRPC 服务器。最初是为了测试使用 usePlaintext() 发出 gRPC 请求并且一切正常,但最终目标是使用 TLS。这里的要求是(因为这是内部应用程序),gRPC channel 请求不需要传递证书,而是在创建 channel 时执行“跳过证书”。 谷歌搜索后,我在 TLS 上找到了示例,但它们都采用 .cert、.key 文件。下面是我试过的片段,它在服务器端失败无法验证证书

 (java code)              
ManagedChannel channel = NettyChannelBuilder.forAddress(<server IP address>, 5001).sslContext(GrpcSslContexts.forClient().trustManager
                                (new File(<.cert file>).build())
                        .build();

做更多的研究,我看到 Golang 有 InsecureSkipVerify() 使用它我可以跳过 ceritifcate 检查(如果我错了请纠正我)

tc := credentials.NewTLS(&tls.Config{
                InsecureSkipVerify: true,
            })

现在我如何在 java 中完成同样的事情?

最佳答案

禁用证书检查的 TLS 的用处值得怀疑,因为它可以被简单地进行 MITMed,因此不受 gRPC 的“支持”。我强烈建议为客户端提供适当的根证书以验证服务器。

也就是说,您可以通过传递 Netty 的 InsecureTrustManagerFactory 绕过 gRPC 的 API 来执行此操作SslContextBuilder.trustManager(TrustManagerFactory):

NettyChannelBuilder.forAddress("<server IP address>", 5001)
    .sslContext(GrpcSslContexts.forClient()
      .trustManager(InsecureTrustManagerFactory.INSTANCE)
      .build())
    .build();

关于ssl - 在 gRPC TLS 中禁用证书检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52540899/

相关文章:

ssl - 我可以有 2 个具有相同 ssl 证书的子域吗

concurrency - 如何允许更多并发客户端与 Netty 连接?

multithreading - 每个连接的 Netty 多线程

java - 如何在 JVM 上的 SSL 跟踪中显示客户端的 IP 地址?

postfix-mta - 如何配置 Postfix 以接受来自局域网外多台主机的连接?

python - 使用带有 TLS 的请求不会提供 SNI 支持

multithreading - 我们是否需要一个以上的老板组线程?

security - 如何避免浏览器中出现 "This page contains both secure and non secure items"警告?

php - file_get_contents、curl、wget 失败并返回 403 响应

javax.net.ssl.SSLHandshakeException : certificate expired - Local or Remote?