尝试使用ruby客户端连接到GRPC服务器。服务器使用带有自签名证书的TLS凭据。我信任我的系统上的证书(ubuntu20.04),但仍然得到了Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
唯一的工作方式是在初始化客户端时手动设置GRPC::Core::ChannelCredentials.new(File.read(cert_path))
。另一种解决方法是设置:this_channel_is_insecure
,但只有在完全删除服务器中的TLS凭据(我不希望如此)时,这才有效。
有办法让GRPC客户端使用系统证书吗?
我假设gem正在使用roots.pem,并试图在Could not load any root certificate
中使用GRPC::Core::ChannelCredentials.set_default_roots_pem
结果来覆盖这一结果。
此外,我还没有找到任何允许我跳过证书验证的参数。
发布于 2022-10-24 22:02:06
可以使用指向包含根的文件系统上的文件的GRPC_DEFAULT_SSL_ROOTS_FILE_PATH
环境变量重写默认根位置。设置GRPC::Core::ChannelCredentials.new(File.read(cert_path))
对我来说也不错。
在Ruby中,很可能不支持在TLS中跳过证书验证的特性。我们在底层内核中支持了相应的特性,但它可能还没有提供给Ruby (至少据我所知)。如果您需要这样做,可以在gRPC Github页面中自由地打开一个特性请求。
谢谢!
https://stackoverflow.com/questions/74041944
复制相似问题