为什么 gRPC C++ 客户端在没有显式服务器的 SSL 证书的情况下无法工作,就像在示例中一样?
Why gRPC C++ client doesn't work without explicit server's SSL certificate, like in samples?
我现在唯一使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/wusing-client-side-side-ssl-tls
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 像自定义类一样构造的指针(内置类型)如何工作?
- C++11: 如何编写一个像 Get 一样工作的模板函数<tuple>...但是收到参数包?
- 右值引用是否像右值引用一样工作
- C 参考与宏替换一样工作
- 为什么 gRPC C++ 客户端在没有显式服务器的 SSL 证书的情况下无法工作,就像在示例中一样?
- 如何与非平凡的成员这样的工会像班级一样正常工作
- 如何在 C++ 中创建一个类,使其像本机 int 类一样工作
- C++ 二叉搜索算法像lower_bound一样工作
- 是否有可能使自己的winapi功能像getpixel一样在Windows上工作
- 如何让 ss << f 像 printf( "%g" , f) 一样工作;
- 定义一个像 Python "with" 语句一样工作的 C 宏有什么缺点?
- c++中是否有任何数据结构或库可以像Python列表和字典一样工作?
- 为什么int8像char一样工作(c++) (Visual Studio 2015)
- 为什么getchar像缓冲区一样工作,而不是像预期的那样实时工作?
- 搜索一个数据结构,它可以像地图一样工作,也可以检索其他信息
- 传递常量引用…它像最重要的const一样工作吗
- 我能让赋值运算符像复制构造函数一样工作吗
- C++:"such strings"类型。使像 fun( "str" ) 一样的函数调用工作
- 我怎样才能让一对向量像哈希表一样工作呢?