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

标签 ssl grpc sni

如何在 Python/C++ gRPC 客户端 API 中设置 TLS/SNI ( https://en.wikipedia.org/wiki/Server_Name_Indication)?

换句话说,在 openssl s_client 中设置 -servername 有什么作用?

我已经通过在 openssl s_client 上使用正确的标志验证了我的 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)>

ChannelOptions struct,我能找到的最接近的选项是 ssl_target_name_override,它也不起作用。

最佳答案

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

关于ssl - 如何在 Python/C++ 的 gRPC 客户端中设置 TLS/SNI 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52435206/

相关文章:

c# - 如何在 Windows 10 IIS 上创建和配置 SSL 证书

java - 谷歌 Protocol Buffer : how to define message contains ArrayList<ArrayList<String>> in proto file

python - 如何在python中热重载grpc-server?

ssl - CloudBees 上具有多个 SSL 证书 (SNI) 的 Multi-Tenancy 应用程序

c# - WCF 使用凭据和 IIS 以编程方式启用 TLS

iis - Azure 存在 SSL 问题

java - gRPC 不生成 java_plugin

ssl - 带 SNI 的本地 HTTPS 服务器

android - https 连接,Android 2.3 和 4 的区别

python - requests.exceptions.SSLError : HTTPSConnectionPool(host ='api-fxpractice.oanda.com' , port=443): url 超出最大重试次数