首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grpc python SSLV3_ALERT_HANDSHAKE_FAILURE

Grpc python SSLV3_ALERT_HANDSHAKE_FAILURE
EN

Stack Overflow用户
提问于 2022-02-09 16:42:28
回答 2查看 443关注 0票数 1

我正在从事一个基于Grpc的项目。然而,当我试图用以下代码连接到服务时,我遇到了一个问题:

代码语言:javascript
运行
复制
import grpc
from grpc_health.v1 import health_pb2
from grpc_health.v1 import health_pb2_grpc

with open('ca_chain_pem_path', 'rb') as f:
    ca = f.read()
credentials = grpc.ssl_channel_credentials(ca)
with grpc.secure_channel('host_domain:50051', credentials) as channel:
    stub = health_pb2_grpc.HealthStub(channel)
    request = health_pb2.HealthCheckRequest()
    response = stub.Check(request)

它会引发以下错误:Handshake failed with fatal error SSL_ERROR_SSL: error:10000410:SSL routines:OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE和我不知道如何修复它。我的服务位于AWS中的负载均衡器后面,我可以通过grpcurl和grpcui连接到它,但不能用python连接,这是令人沮丧的。

我在谷歌寻找一个解决方案,在这个页面上没有成功。提前感谢

PD:我在代码中读取的证书是在aws域中对已部署的服务进行签名的证书

EN

回答 2

Stack Overflow用户

发布于 2022-10-30 22:25:45

我有同样的问题,同样的结果。我发现了这个问题- ED25519算法在TLS上的grpcioo失败

正如讨论中所建议的那样,我已经用这个环境变量重新安装了grcpio

export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1

ssl错误消失了。

票数 1
EN

Stack Overflow用户

发布于 2022-02-09 19:29:27

如果它是一个私有证书,我认为您也应该将它指定为ssl_channel_credentials:

代码语言:javascript
运行
复制
with open(certs_folder / "client.key", 'rb') as fh:
    key = fh.read()
with open(certs_folder / "client.pem", 'rb') as fh:
    cert = fh.read()
with open(certs_folder / "server.pem", 'rb') as fh:
    root_ca = fh.read()

credentials = grpc.ssl_channel_credentials(root_certificates=root_ca, 
    private_key=key, certificate_chain=cert)

host_domain:50051与证书中的内容匹配吗?如果不是,您可能需要在options=(('grpc.ssl_target_name_override',中使用grpc.secure_channel

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71053456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档