登录
首页 >  Golang >  Go问答

GRPC Golang 服务器和 NodeJS 客户端。 TLS 连接失败

来源:stackoverflow

时间:2024-04-17 23:48:38 472浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《GRPC Golang 服务器和 NodeJS 客户端。 TLS 连接失败》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

当我不使用 tls 时一切正常。但当我这样做时,它无法连接。更多详情:

我已经配置了 golang grpc 服务器,就像这篇博客在“与证书颁发机构的相互 tls”部分中所说的 https://bbengfort.github.io/programmer/2017/03/03/secure-grpc.html 中的内容一样。服务器已启动并运行良好。

现在我有一个用 nodejs 编写的客户端,尝试通过 grpc 发送一些数据。我已经配置了 nodejs,如下所示:

var proto_path = __dirname + '/protos/log.proto';
var grpc = require('grpc');
var protoloader = require('@grpc/proto-loader');
var packagedefinition = protoloader.loadsync(
    proto_path,
    {keepcase: true,
     longs: string,
     enums: string,
     defaults: true,
     oneofs: true
    });
    
var ssl_creds = grpc.credentials.createssl(fs.readfilesync('ssl/ca.crt'), fs.readfilesync('ssl/client.key'), fs.readfilesync('ssl/client.crt'));

var log_proto = grpc.loadpackagedefinition(packagedefinition).log;
var client = new log_proto.logdata('<ip>:<port>',ssl_creds); 

我创建了证书,就像这里提到的那样:https://github.com/grpc/grpc/issues/6757。当然,我确实看到了这个评论:https://github.com/grpc/grpc/issues/6757#issuecomment-264617793。

当我运行 nodejs 客户端时,我仍然看到错误:

{ Error: 14 UNAVAILABLE: Connect Failed
at Object.exports.createStatusError (/app/node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (/app/node_modules/grpc/src/client_interceptors.js:1204:28)
at InterceptingListener._callNext (/app/node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/app/node_modules/grpc/src/client_interceptors.js:618:8)
at callback (/app/node_modules/grpc/src/client_interceptors.js:845:24)
code: 14,
metadata: Metadata { _internal_repr: {} },
details: 'Connect Failed' }

证书详细信息: sslv3 tlsv1.2

编辑:

我将环境变量 grpc_verbosity 添加为 debug 并发现以下内容:peer name <ip> is not inpeercertificate


解决方案


所以问题是证书无法将 ip 地址作为主机名。它应该有一个名称而不是 ip - 通过提供名称并覆盖目标名称来修复它。

const options = {
  'grpc.ssl_target_name_override' : 'simple-host',
  'grpc.default_authority': 'simple-host'
};
var client = new log_proto.LogData('<IP>:<PORT>',ssl_creds,options);

今天关于《GRPC Golang 服务器和 NodeJS 客户端。 TLS 连接失败》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>