簡體   English   中英

Java gRPC - TLS - 如何在客戶端設置雙向 TLS?

[英]Java gRPC - TLS - how to set up mutual TLS on the client side?

我在使用 gRPC 在客戶端和服務器之間建立雙向流的軟件應用程序上工作。

我正在尋找與此票證僅在 java 中的答案類似的內容: 如何為 gRPC 啟用服務器端 SSL?

我想配置我的應用程序,以便他們可以選擇他們想要使用的 TLS 方案:

場景一:明文(無加密)

場景 2 :服務器端 TLS

場景 3 :雙向 TLS

對於 TLS 設置,我在非 Android 環境中使用 Java,所以我只會考慮使用https://github.com/grpc/grpc-java/blob/master/SECURITY.md#openssl-statically的 OpenSSL 安裝場景-linked-netty-tcnative-boringssl-static

配置服務器端似乎非常簡單,因為它有很好的記錄: https : //github.com/grpc/grpc-java/blob/master/SECURITY.md#mutual-tls

以下是相應 TLS 選項的步驟:

場景 1 的服務器端配置:使用builder.usePlaintext

方案2的服務器端配置:添加NettyServerBuilder.sslContext內置的SSL上下文建設者GrpcSslContexts.forServer並設置cert chaincert key (如果需要的話和密碼)

有關方案3的服務器端配置:添加NettyServerBuilder.sslContext內置的SSL上下文建設者GrpcSslContexts.forServer並設置cert chaincert key (密碼如果需要的話),並且還設置了trustManager上sslContextBuidler設置為信任證書文件。

服務器端部分有據可查,非常好。

現在我想在客戶端配置一個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 通道上的 TLS 到 grpc。

場景 2 的客戶端配置:使用nettyChannelBuilder.negotiationType(NegotiationType.TLS).sslContext(GrpcSslContexts.configure(SslContextBuilder.forClient(), SslProvider.OPENSSL).build()) 這將配置通道使用默認密碼和應用程​​序協議配置通過 TLS 與 grpc 服務器進行通信。

場景 3 的客戶端配置:使用nettyChannelBuilder.negotiationType(NegotiationType.TLS).sslContext(GrpcSslContexts.configure(SslContextBuilder.forClient(), SslProvider.OPENSSL).sslContextBuilder.trustManager(clientAuthCertFile) .clientAuth(ClientAuth.OPTIONAL).build())通道設置 TLS nettyChannelBuilder.negotiationType(NegotiationType.TLS).sslContext(GrpcSslContexts.configure(SslContextBuilder.forClient(), SslProvider.OPENSSL).sslContextBuilder.trustManager(clientAuthCertFile) .clientAuth(ClientAuth.OPTIONAL).build())其中clientAuthCertFile是信任證書文件,如果您需要ClientAuth.REQUIRED TLS, ClientAuth.OPTIONAL也可以是ClientAuth.REQUIRED

我的客戶端配置有什么問題嗎? 我需要任何調整嗎? 在這篇文章中得到社區的一些祝福后,我將把它作為 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 該項目,並查看示例/README.md。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM