如何正确生成 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"
对于某些背景,我正在关注 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"