如何正确生成 grpc java auth 示例所需的 .pem 文件?

How do I properly generate the .pem file(s ?) needed for the grpc java auth example?

对于某些背景,我正在关注 this guide,因为我正在使用 auth 构建一些 grpc 微服务。

我正在尝试运行非常基本的 java 示例,但我生成的密钥不允许 ssl 连接发生。

这是我的服务器代码。

server = NettyServer.forPort(8050)
    .useTransportSecurity(
        new File(serverCert)
        new File(serverKey)
    )
    .addService(
        new TestService(); // my implementation of the grpc service
    )
    .build();

server.start();

这是我的客户端代码

channel = NettyChannelBuilder.forAddress("localhost", 8050)
    .sslContext(
        GrpcSslContexts
            .forClient()
            .trustManager(
                new File(serverCert)
            ).build()
    ).build();

现在,当我去生成密钥时

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

输入一些关于我自己的信息后,我得到了 2 个文件

>> ls 
key.pem cert.pem

在我上面的代码中,serverKey 指的是 "key.pem",serverCert 指的是 "cert.pem"

我可以毫无问题地启动服务器。当我尝试连接客户端时,出现以下错误

INFO: [ManagedChannelImpl@6ddf90b0] Created with target localhost:8050
Nov 03, 2016 11:25:16 AM getapi.example.TestClient greet
INFO: Will try to greet world ... 
Nov 03, 2016 11:25:17 AM getapi.example.TestClient greet
WARNING: RPC failed: Status{code=UNAVAILABLE, description=null, cause=javax.net.ssl.SSLHandshakeException: General OpenSslEngine problem}
Nov 03, 2016 11:25:17 AM io.grpc.internal.ManagedChannelImpl maybeTerminateChannel
INFO: [ManagedChannelImpl@6ddf90b0] Terminated

最相关的行似乎是这个

javax.net.ssl.SSLHandshakeException: General OpenSslEngine problem

我承认除了对 public 密钥密码学有非常基本的了解外,我对 keys/certs/pem 文件基本上一无所知。

有人可以阐明如何正确生成 grpc 期望的密钥文件吗?

我错误地创建了我的密钥。这是 openssl 命令

openssl req -x509 -days 365 -nodes -newkey rsa:1024 -keyout key.pem -out cert.pem

当它询问通用名称时,我最初输入了我的 IP 地址。这是不正确的。

我不能代表所有的用例,但这里适当的做法是使用 "localhost"