grpc/go 如何在 grpc.Dial 中设置 grpc.ssl_target_name_override

Posted

技术标签:

【中文标题】grpc/go 如何在 grpc.Dial 中设置 grpc.ssl_target_name_override【英文标题】:grpc/go how to set grpc.ssl_target_name_override in grpc.Dial 【发布时间】:2021-04-05 22:51:22 【问题描述】:

我目前正在尝试在 go 中测试 grpc 客户端和服务器之间的 ssl/tls 身份验证。不知道如何通过 grpc.ssl_target_name_override(https://grpc.github.io/grpc/core/group__grpc__arg__keys.html#ga218bf55b665134a11baf07ada5980825)

在客户端创建频道时,目前看到:

“传输:身份验证握手失败:x509:证书对 xxx.xxx.net 有效,不是 localhost”

    // Create the client TLS credentials
    creds, err := credentials.NewClientTLSFromFile("cert.pem", "")
    if err != nil 
        panic(err)
    

    conn, err := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(creds))
    if err != nil 
        panic(err)
    

我看到了其他语言的文档:https://grpc.github.io/grpc/cpp/classgrpc_1_1_channel_arguments.html#a42313e3360b50c354c68572e7bf5bccb

【问题讨论】:

【参考方案1】:

我必须在 NewClientTLSFromFile 函数中将 serverNameOverride 值设置为 xxx.xxx.net,这解决了问题。

// Create the client TLS credentials
    creds, err := credentials.NewClientTLSFromFile("cert.pem", "xxx.xxx.net")
    if err != nil 
        panic(err)
    

【讨论】:

以上是关于grpc/go 如何在 grpc.Dial 中设置 grpc.ssl_target_name_override的主要内容,如果未能解决你的问题,请参考以下文章

grpc client 源码分析

创建客户端并调用

如何在 Netbeans 中设置环境变量?

如何在 Android 中设置 libsvm?

如何在 Laravel 中设置全局变量?

如何在代码中设置绑定?