Ssl 如何在Python/C+的gRPC客户端中设置TLS/SNI选项+;?

Ssl 如何在Python/C+的gRPC客户端中设置TLS/SNI选项+;?,ssl,grpc,sni,Ssl,Grpc,Sni,如何在Python/C++gRPC客户端API中设置TLS/SNI() 换句话说,在openssl s_客户端中设置-servername的等价物是什么 我已经通过在openssl s_客户端上使用正确的标志验证了我的TLS服务器的工作情况: openssl s_client -connect "myserver.tunnel.dev:4443" -servername "myserver.tunnel.dev" 但是,我无法使用Python/C++API正确设置凭据: uri = "my

如何在Python/C++gRPC客户端API中设置TLS/SNI()

换句话说,在
openssl s_客户端
中设置
-servername
的等价物是什么

我已经通过在openssl s_客户端上使用正确的标志验证了我的TLS服务器的工作情况:

 openssl s_client -connect "myserver.tunnel.dev:4443" -servername "myserver.tunnel.dev" 
但是,我无法使用Python/C++API正确设置凭据:

uri = "myserver.tunnel.dev:4443"
hostname = "myserver.tunnel.dev"

creds = grpc.ssl_channel_credentials(
    root_certificates=dev_cert)
    # root_certificates=certificate_chain)
    # certificate_chain=certificate_chain)
channel = grpc.secure_channel(uri, creds,
    options=(('grpc.ssl_target_name_override', hostname),)
)
这引发了:

grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.UNAVAILABLE, Connect Failed)>
grpc.\u通道.\u会合点:

在结构中,我能找到的最接近的选项是
ssl\u target\u name\u override
,它也不起作用。

设置
options=(('grpc.ssl\u target\u name\u override',hostname),)
应该起作用。这是覆盖主机名的正确方法。在这种情况下,这似乎是不必要的,因为您的uri主机和覆盖主机是相同的。您可以使用列出的环境变量打开一些跟踪,查看握手是否失败,或者连接失败是否有其他原因

按照srini的回答中的建议,尝试使用
GRPC\u TRACE=all
GRPC\u VERBOSITY=debug
运行,以获取有关连接失败的其他详细信息,例如
GRPC\u TRACE=all GRPC\u VERBOSITY=debug python client.py