当前位置: 首页 > 知识库问答 >
问题:

Java gRPC-TLS-如何在客户端设置相互TLS?

农飞尘
2023-03-14

我在一个软件应用程序上工作,该应用程序使用gRPC在客户端和服务器之间建立双向流。

我正在寻找类似于这张票的答案的东西,只在java中:如何为gRPC启用服务器端SSL?

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

场景1:明文(无加密)

场景2:服务器端TLS

场景3:共同TLS

对于TLS设置,我在非Android环境中使用Java,因此我只考虑使用https://github.com/grpc/grpc-java/blob/master/SECURITY.md#openssl-静态链接netty tcnative boringssl静态

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

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

场景1的服务器端配置:使用builder.use明文

场景2的服务器端配置:添加一个由SSL Context Builder构建的NettyServerBuilder.sslContext,并使用GrpcSslContexts.forServer设置证书链证书键(和密码(如果需要)

场景3的服务器端配置:添加NettyServerBuilder。sslContext由SSL上下文生成器使用GrpcSslContexts构建。对于服务器,设置证书链证书密钥(以及密码,如果需要),并将sslContextBuidler上的信任管理器设置为信任证书文件。

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

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

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

场景1的客户端配置:使用NettyChannel Builder。使用纯文本(true)。这将禁用grpc网络通道上的TLS。

场景2的客户端配置:使用nettyChannelB设置sslContextuilder.negotiationType(Ne谈判类型。TLS). sslContext(GrpcSslContexts.configure(SslContextBuilder.forClient(),SslProvider。构建代码。这将配置通道,以便使用默认密码和应用程序协议配置通过TLS与grpc服务器通信。

场景3的客户端配置:使用nettyChannelBuilder.negotiation类型(Ne谈判类型)为netty通道设置TLS。TLS). sslContext(GrpcSslContexts.configure(SslContextBuilder.forClient(),SslProvider。OPENSSL). sslContextBuilder.trust管理器(clientAuthCertFile). clientAuth(ClientAuth.其中clientAuthCertFile是信任证书html" target="_blank">文件和ClientAuth。OPTIONAL也可以是ClientAuth。需要,如果您需要相互TLS。

我的客户端配置有什么不正确的地方吗?我需要调整一下吗?我会把这个作为公关添加到安全中。在这篇帖子上得到社区的一些祝福后,md文件。

共有1个答案

戚宏扬
2023-03-14

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

最新版本的grpc-java一旦合并这个pr将有一个非常好的工作Hello世界的例子。因此,您所要做的就是git从master克隆该项目,并查看示例/README. md。

 类似资料:
  • Spring boot 2.3.x和Spring 5.x最近添加了对基于WebClient类配置反应性oauth2客户端的支持。 在没有相互的TLS/SSL的情况下进行此调用是非常简单的。 正常(没有TLS/SSL)配置()代码提取如下:- 属性文件 怎么做?我想与社会人士分享这点,并在下面回答我自己的问题

  • 在我做了插座之后。多房间聊天应用程序的IO服务器如何使用https://github.com/socketio/socket.io-client-java ? 我搜索了很多,在socket的客户端还没有找到最新的例子。对于android,大多数教程和示例都是针对带有节点的服务器端的。js。

  • 自定义成菜单 说明: 1)启用该功能后,直播客户端可以通过自定义菜单的方式加载用户自定义的网页,方便结合自身业务进行交互操作(客户端5.0.0以上版本支持) 问卷设置 说明: 1)在直播管理页面点击 “问卷设置”,启用该功能后,直播客户端可以通过接口请求的方式将用户问卷库中的问卷导入到客户端中使用 2)关于问卷设置的具体功能及使用方法,请参考:问卷接口开发指南 菜单设置 说明: 1)支持对客户端的

  • 问题内容: 我有一个证书文件,该位置是:并且我想将该证书用于我的tls配置,以便我的http客户端在与其他服务器通信时使用该证书。我当前的代码如下: 那么,如何在我的TLS配置中分配证书?我可以在http://golang.org/pkg/crypto/tls/#Config中看到证书设置,有人可以建议如何在此处配置我的证书位置吗? <-是错误的,因为我正在传递string。对吗?我没有任何其他文

  • 问题内容: 我有几个关于客户端节点的Elasticsearch问题: 我可以说:任何节点只要打开HTTP端口,我都可以将它们视为“客户端”节点,因为我们可以通过该节点进行搜索/索引。 实际上,当和时,我们将节点视为客户端节点,如果我设置了10个客户端节点,是否需要在客户端进行路由,这意味着如果我在代码 中将clientOne:9200 指定为ES门户,则 clientOne会 转发其他HTTP请求

  • 我有一个运行在j2ee服务器(jboss 4.0.4)上的axis2 web服务客户端,该服务器一直在使用tomcat上托管的web服务。最近tomcat管理员打开了TLS,现在我的axis2客户端无法工作。如何为axis2客户端打开TLS? 谢谢你的帮助!