java - java - 如何使用java keystore而不是证书和 key 文件在java中使用ssl实例化grpc服务器?

标签 java ssl tls1.2 keystore grpc-java

我已经看到了有关如何为客户端执行此操作的示例,但是 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 可以使用工厂类构建:
  • KeyManagerFactory
  • TrustManagerFactory

  • 其他配置请参见此处:DZone - Secure Your gRPC Services With SSL/TLS

    关于java - java - 如何使用java keystore而不是证书和 key 文件在java中使用ssl实例化grpc服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66784657/

    相关文章:

    java - SunCertPathBuilderException : unable to find valid certification path to requested target`

    sql-server - 将 TLSv1.2 与 Microsoft JDBC 驱动程序和 Oracle JRE 7 结合使用

    java - arraylist 没有在单独的循环方法中正确打印出来?应该归咎于包装类或循环?

    java - 同一对象上的多个数据结构

    apache - 如果请求来自特定主机,则特定 URL 重定向到 http

    email - LetsEncrypt 具有多域和多子域的 SSL 证书

    node.js - https.Agent 在 Node 中的作用是什么?

    .net - 在 AWS 服务器托管的 .NET 应用程序中禁用旧协议(protocol)(低于 TLS 1.2)

    java - 生成 1 到 100 之间的 1 到 300 个数字并将每个数字放入字符串中时遇到问题

    java - Spring 可分页 : Nav Bar Pages by TotalPages