【发布时间】:2019-07-21 18:27:30
【问题描述】:
我正在尝试将自签名证书与 GRPC 一起使用。我生成了证书/密钥:
openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
这给了我两个文件:cert.pem 和 key.pem。
我有一个 Kotlin GRPC 服务器,我设置如下:
val ca = classLoader.getResourceAsStream("cert.pem")
val key = classLoader.getResourceAsStream("key.pem")
ServerBuilder
.forPort(8443)
.useTransportSecurity(ca, key)
.addService(...)
.build()
.start()
这似乎已成功启动。我有一个颤振客户端,我通过以下方式设置:
final cert = await rootBundle.load('cert.pem')
final certAsList = cert.buffer
.asUint8List(
cert.offsetInBytes,
cert.lengthInBytes,
)
.map((uint8) => uint8.toInt())
.toList()
final channel = new ClientChannel(
'localhost',
port: 8443,
options: ChannelOptions(
credentials: ChannelCredentials.secure(certificates: certAsList),
),
)
但是,使用此通道连接到我的服务会出现以下错误:
gRPC Error (14, Error connecting: HandshakeException: Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:352)))
这个设置有什么问题?
【问题讨论】:
-
您找到解决此错误的好方法了吗?在我的颤振 grpc 客户端中得到完全相同的结果。
-
@codeKiller 看看我的回答
标签: ssl kotlin flutter dart grpc