gpt4 book ai didi

security - Java gRPC - TLS - 如何在客户端设置双向 TLS?

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:35 25 4
gpt4 key购买 nike

我开发的软件应用程序使用 gRPC 在客户端和服务器之间建立双向流。

我只在 java 中寻找类似于这张票的答案的东西:How to enable server side SSL for gRPC?

我想配置我的应用程序,以便他们可以选择他们想要使用的 TLS 方案:

场景一:明文(未加密)

场景 2:服务器端 TLS

场景 3:相互 TLS

对于 TLS 设置,我在非 Android 环境中使用 Java,因此我将只考虑使用 https://github.com/grpc/grpc-java/blob/master/SECURITY.md#openssl-statically-linked-netty-tcnative-boringssl-static 的 OpenSSL 安装方案。

配置服务器端 似乎非常简单,因为它有很好的文档记录:https://github.com/grpc/grpc-java/blob/master/SECURITY.md#mutual-tls

以下是相应 TLS 选项的步骤:

场景一的服务端配置:使用builder.usePlaintext

场景 2 的服务器端配置:添加由 SSL Context Builder 使用 GrpcSslContexts.forServer 构建的 NettyServerBuilder.sslContext 并设置 cert chaincert key(如果需要还有密码)

场景 3 的服务器端配置:添加由 SSL Context Builder 使用 GrpcSslContexts.forServer 构建的 NettyServerBuilder.sslContext 并设置 cert chaincert key(如果需要的话还有密码),还在 sslContextBuidler 上设置一个 trustManager 到信任证书文件。

服务器端部分有很好的文档,非常好。

现在我想在客户端配置一个NettyChannelBuilder。我唯一能找到的信息是在这个单元测试中:https://github.com/grpc/grpc-java/blob/master/interop-testing/src/test/java/io/grpc/testing/integration/TlsTest.java

以下是我认为需要的配置,但需要得到确认。

场景 1 的客户端配置:使用 nettyChannelBuilder.usePlaintext(true)。这将禁用 netty channel 上的 TLS 到 grpc。

场景 2 的客户端配置:使用 nettyChannelBuilder.negotiationType(NegotiationType.TLS).sslContext(GrpcSslContexts.configure(SslContextBuilder.forClient(), SslProvider.OPENSSL) 设置 sslContext .build())。这将配置 channel 以使用默认密码和应用程​​序协议(protocol)配置通过 TLS 与 grpc 服务器通信。

场景 3 的客户端配置:使用 nettyChannelBuilder.negotiationType(NegotiationType.TLS).sslContext(GrpcSslContexts.configure(SslContextBuilder.forClient(), SslProvider.OPENSSL).sslContextBuilder.trustManager(clientAuthCertFile)
.clientAuth(ClientAuth.OPTIONAL).build())
其中 clientAuthCertFile 是信任证书文件,ClientAuth.OPTIONAL 也可以是 ClientAuth.REQUIRED 如果您需要双向 TLS。

我的客户端配置有什么不正确的地方吗?我需要任何调整吗?在得到社区对此帖子的一些支持后,我会将其作为 PR 添加到 security.md 文件中。

最佳答案

我在这里向 grpc-java 项目添加了一个 hello world TLS PR https://github.com/grpc/grpc-java/pull/3992

一旦这个 pr 合并,最新版本的 grpc-java 将有一个非常好的工作 hello-world 示例。所以你所要做的就是从 master git clone 这个项目,然后查看 example/README.md。

关于security - Java gRPC - TLS - 如何在客户端设置双向 TLS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com