python - 如何在没有客户端 SSL 证书的情况下在 python gRPC 客户端中打开安全通道

标签 python ssl grpc grpc-python grpc-go

我有一个具有有效 TLS 证书且不需要客户端 TLS 的 grpc 服务器(在 Go 中)。出于某种原因,我无法在 Python 中实现没有 mTLS 的客户端,即使我可以在 Golang 中这样做。
在Python中我有

os.environ["GRPC_VERBOSITY"] = "DEBUG"
# os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "/etc/ssl/certs/ca-bundle.crt"

channel = grpc.secure_channel(ORBIUM_ADDR, grpc.ssl_channel_credentials())
grpc.channel_ready_future(channel).result(timeout=10)
这给了我以下错误
D0513 08:02:08.147319164   21092 security_handshaker.cc:181] Security handshake failed: {"created":"@1652446928.147311309","description":"Handshake failed","file":"src/core/lib/security/transport/security_handshaker.cc","file_line":377,"tsi_code":10,"tsi_error":"TSI_PROTOCOL_FAILURE"}
如果我通过取消注释掉注释行来使用 SSL 证书,我可以让它工作。我知道我的服务器不会请求、要求或验证客户端证书,因为以下 Go 代码完美运行
conn, err := grpc.DialContext(
    ctx,
    gRPCAddr,
    grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")),
)
dummyClient := dummy.NewDummyServiceClient(conn)
if _, err := dummyClient.Ping(context.Background(), &dummy.PingRequest{
    Ping: "go client ping",
}); err != nil {
    return fmt.Errorf("failed to ping: %w", err)
}

最佳答案

https://grpc.github.io/grpc/python/_modules/grpc.html#secure_channelchannel = grpc.secure_channel(ORBIUM_ADDR, grpc.ssl_channel_credentials()) 的文档.该函数依赖于类 channel ,参见文档 https://grpc.github.io/grpc/python/_modules/grpc/aio/_channel.html .
基本上,类 Channel 包装 C 代码以提供安全通道。包装好的 C 代码需要证书。如果您可以在 C 中实现,那么只更改 C 代码可能是最简单的。

关于python - 如何在没有客户端 SSL 证书的情况下在 python gRPC 客户端中打开安全通道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72230151/

相关文章:

docker - 如何请求由Go运行在Cloud Run上的gRPC服务器

java - 如何将 Google proto 时间戳转换为 Java LocalDate?

Python - 在二维列表中查找所有偶数的总和

Python 堆栈迭代,最佳实践

python - boto3 从客户端获取资源

java - HTTPSURL 连接和 Apache(系统)DefaultHttpClient 之间的证书链不同

php - PHP session 的 cookie 安全吗?

python - 非常奇怪的网页抓取问题 : Post request not behaving as expected

php - 错误 :error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

java - 我使用 gRPC 生成 java 代码 '@javax.annotation.Generated' ,它报告 'Error:(20,18) java: cannot find symbol' 。怎么解决?