java - 如何使用 keystore 在 grpc 中使用 java 启用 ssl

标签 java spring grpc grpc-java

使用 java 的 gRPC 新手,我无法找到如何在使用 truststore 和 clientstore 时启用 ssl 的方法。我已经能够通过指向单个证书但不使用信任库来启用 ssl。任何线索都会非常有帮助。

最佳答案

您只需将 CA 证书(信任库)的 KeyStore 转换为 TrustManagerFactory 以及客户端证书/ key (clientstore)的 KeyStore ) 到 KeyManagerFactory

前者可以通过

来完成
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm();
tmf.init(truststore);

后者可以通过

来完成
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientstore, password);

然后,如果您使用 Netty 传输,则可以使用以下命令构建 SslContext

SslContext sslContext = GrpcSslContexts.forClient().trustManager(tmf).keyManager(kmf).build();

查看其SslContextBuilder Javadoc .

最后,构建 gRPC channel

NettyChannelBuilder.forAddress(host, port).sslContext(sslContext).build();

如果您使用 Okhttp 传输,则需要使用 SSLSocketFactory 构建

SSLContext context = SSLContext.getInstance("TLS");
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());
SSLSocketFactory sslSocketFactory = context. getSocketFactory()

并使用以下内容构建 gRPC channel

OkHttpChannelBuilder.forAddress(host, port).sslSocketFactory(sslSocketFactory).build();

关于java - 如何使用 keystore 在 grpc 中使用 java 启用 ssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64008293/

相关文章:

java - 在 firebase android 中保存具有相同对象列表的对象的最佳方法是什么

go - 在 go AuthFromMD 中,始终期望将授权作为 header 名称。我怎样才能覆盖它。

java - C++ getline() 比 Java 的 readLine() 慢

java - 有时我会关闭 Stream,有时我不会。为什么我得到这个?

Spring Data Rest自定义 Controller

java - 使用 select max() 然后插入 max() + 1 的 Hibernate 并发问题

protocol-buffers - 如何在没有太多重复的情况下使用 gRPC 服务创建 CRUD?

python - 如何使用 Google Cloud get_operation?

java - 如何根据整数数组对对象集进行排序

java - 在 Beagle bone Black 中运行 jar 文件时出错