我已经看到了有关如何为客户端执行此操作的示例,但是 ServerBuilder 类在配置 ssl 时似乎只需要一个证书和 key 文件。反正我看不到设置 sslContext 或 channel 。只有一个 useTransportSecurity(File certChain, File privateKey) 方法需要 certChain 和私钥。我可以以编程方式从 keystore 中提取那些吗?目前我实例化服务器如下:
server = ServerBuilder.forPort(port). useTransportSecurity(certFile, keyFile).addService(this).build().start();
应用程序的其他部分使用 jks trust/keystores,我们不希望将 key 存储在两个位置。
最佳答案
默认 ServerBuilder
正如您已经发现的那样是有限的。我建议使用 NettyServerBuilder
它能够处理不同类型的输入,例如 KeyStore、KeyManager 等。
将以下依赖项添加到您的项目中:
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
</dependency>
SslContextBuilder sslContextBuilder = SslContextBuilder.forServer(keyManager).trustManager(trustManager);
SslContext sslContext = GrpcSslContexts.configure(sslContextBuilder).build();
Server server = NettyServerBuilder.forPort(8443)
.addService(new HelloServiceImpl())
.sslContext(sslContext)
.build()
.start();
KeyManager/TrustManager 可以使用工厂类构建:其他配置请参见此处:DZone - Secure Your gRPC Services With SSL/TLS
关于java - java - 如何使用java keystore而不是证书和 key 文件在java中使用ssl实例化grpc服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66784657/