使用 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/