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 无法连接

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值