在gRPC TLS中禁用证书检查

pku*_*arn 2 ssl ssl-certificate netty grpc tls1.2

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

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

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

tc := credentials.NewTLS(&tls.Config{
                InsecureSkipVerify: true,
            })
Run Code Online (Sandbox Code Playgroud)

现在如何在Java中完成相同的工作?

Eri*_*son 5

具有禁用的证书检查功能的TLS的用途令人质疑,因为它可以被简单地MITM化,因此gRPC不“支持”。我强烈建议为客户端提供适当的根证书以验证服务器。

这就是说,你可以去周围GRPC的API通过传递的Netty的做到这一点InsecureTrustManagerFactorySslContextBuilder.trustManager(TrustManagerFactory)

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