php grpc code 14,PHP 无法连接 TLS 证书认证的 gRPC(golang 实现)

证书生成

openssl ecparam -genkey -name secp384r1 -out server.key

openssl req -new -x509 -sha256 -key server.key -out server.pem -days 3650

Common Name (eg, fully qualified host name) []:test

golang 客户端连接正常

c, err := credentials.NewClientTLSFromFile("./config/server/server.pem", "test")

if err != nil {

log.Fatalf("credentials.NewClientTLSFromFile err: %v", err)

}

conn, err := grpc.Dial(":50052", grpc.WithTransportCredentials(c))

if err != nil {

log.Fatalf("grpc.Dial err: %v", err)

}

defer conn.Close()

client := pb.NewQueryOnlineWsClient(conn)

resp, err := client.OnlineConn(context.Background(), &pb.QueryOnlineRequest{CompanyId: 1})

if err != nil {

log.Fatalf("client.Search err: %v", err)

}

log.Printf("resp: %s", resp.GetOnline())

PHP 客户端连接失败

/*$client = new QueryOnlineWsClient('192.168.20.10:50052', [

'credentials' => \Grpc\ChannelCredentials::createInsecure()

]);*/

$pem = file_get_contents(storage_path("server.pem"));

$client = new QueryOnlineWsClient('192.168.20.10:50052', [

'credentials' => \Grpc\ChannelCredentials::createSsl($pem),

'grpc.ssl_target_name_override' => 'test',

]);

$request = new QueryOnlineRequest();

$request->setCompanyId(1);

$request->setConnKey(['1']);

list ($response, $status) = $client->OnlineConn($request)->wait();

dump($status);

输出

{#911 ▼

+"metadata": []

+"code": 14

+"details": "Connect Failed"

}

总结

gRPC服务端如果不启用 TLS 认证 。PHP 客户端是正常连接的

server.pem 正确引入并保证正确

在同样启用 TLS 认证, golang 客户端可以连接, PHP 无法连接

大家帮我看看,我的代码问题是出在那里呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gRPC是一种高性能、开源的远程过程调用(RPC)框架,它使用Protocol Buffers作为接口定义语言(IDL)。双向认证是指在进行gRPC通信时,服务端和客户端都需要进行身份验证。在gRPC中,双向认证可以通过使用TLS/SSL证书实现。 在gRPC实现双向认证需要以下步骤: 1. 生成证书:首先,需要生成服务端和客户端的证书。可以使用openssl或其他工具来生成证书和私钥。 2. 配置TLS/SSL:服务端和客户端都需要配置TLS/SSL来启用加密通信。服务端需要加载证书和私钥,而客户端需要加载服务端的证书用于验证服务端身份。 3. 配置双向认证:服务端和客户端都需要配置双向认证。服务端需要验证客户端的证书,而客户端需要验证服务端的证书。 4. 实现认证逻辑:在服务端和客户端的代码中,需要实现证书验证逻辑。可以使用TLS配置中的回调函数来进行验证。 可以参考引用\[2\]中提供的gRPC-Gateway和引用\[3\]中的依赖安装命令来实现gRPC双向认证。这些工具和库可以帮助简化双向认证实现过程。 总结起来,golang实现gRPC双向认证的步骤包括生成证书、配置TLS/SSL、配置双向认证实现认证逻辑。通过这些步骤,可以确保服务端和客户端之间的通信是安全和可信的。 #### 引用[.reference_title] - *1* [Go Grpc Jwt身份认证和Gateway集成以及HTTPS双向认证](https://blog.csdn.net/dz45693/article/details/112180692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【gRPC】双向认证grpc-gateway原理及简单使用](https://blog.csdn.net/dl962454/article/details/124384299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值