c++ - 为什么 gRPC C++ 客户端在没有明确的服务器 SSL 证书的情况下无法工作,就像在示例中一样?
问题描述
我现在使 SSL 加密的服务器和客户端工作的唯一方法是显式地向客户端提供服务器的证书。如何让服务器将其证书提供给客户端而不直接在客户端代码中设置?
我正在使用 C++ gRPC。当我创建 gRPC 服务器时,我设置了它的自签名证书和私钥:
grpc::SslServerCredentialsOptions sslServerOptions;
grpc::SslServerCredentialsOptions::PemKeyCertPair pkcp;
pkcp.private_key = serverPrivateKey;
pkcp.cert_chain = serverCertChain;
sslServerOptions.pem_key_cert_pairs.push_back( pkcp );
sslServerOptions.pem_root_certs = “”;
grpc::SslServerCredentials( sslServerOptions );
在客户端,如果我将 pem_root_certs 显式设置为服务器的证书 - 它工作正常
grpc::SslCredentialsOptions sslChannelOptions;
sslChannelOptions.pem_root_certs = serverCertChain;
sslChannelOptions.pem_cert_chain = “”;
sslChannelOptions.pem_private_key = “”;
grpc::SslCredentials( sslChannelOptions );
但是,如果我使用 GRPC 示例中的代码:
grpc::SslCredentials( grpc::SslCredentialsOptions() );
我收到此错误:
E0520 15:24:31.189310128 17046 ssl_transport_security.c:921] Handshake
failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL
routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.
Translate to Communication exception: Exception encountered while
receiving response from localhost:10000, with status 14, message: Connect
Failed
unknown file: Failure
C++ exception with description "Exception encountered while receiving
response from localhost:10000, with status 14, message: Connect Failed"
thrown in the test body.
这是我创建 SSL 密钥的方法:
openssl req -new -key server.key -out server_selfsigned.csr
"/O=MyCompany/CN=localhost"
openssl x509 -req -days 1825 -in server_selfsigned.csr -signkey
server.key -set_serial 02 -out server_selfsigned.pem
我的问题:为什么没有明确的服务器证书客户端就不能工作?谢谢 !
解决方案
我对 C++ 不熟悉,但是——盯着你的代码——我怀疑:
- 您必须向客户端提供服务器的证书,以便它可以进行身份验证。
- 该示例
grpc::SslCredentialsOptions()
对应于 Go 的grpc.WithInsecure()
. 如果正确,则此方法不使用 TLS。
我想你指的是这个: https ://grpc.io/docs/guides/auth/#using-client-side-ssl-tls
推荐阅读
- python - cv2.normalize() 中的第二个参数是什么
- python - 在python中为不同的矩形生成不同的模板
- elm - Elm 管理网站的特定部分
- linux - 传输大文件时出错:参数列表太长
- javascript - 逗号分隔对象
- c - 从文件读取并将其复制到数组:运行时检查失败 #2
- python - 使用lz4在django rest框架中发送有效负载时压缩和解压缩图像
- javascript - 将 ejs 与 expressjs 一起使用时出现内部服务器错误
- percentage - 根据总额和税收百分比计算税收价值
- javascript - 当数据与输入的字符串匹配时向上移动行