【发布时间】:2017-05-18 22:41:10
【问题描述】:
我有使用 openssl - 静态方式运行的 GRPC 服务器,我正在尝试使用 nodejs 客户端连接到服务器
我没有看到任何错误,但我也没有看到它连接到服务器。 如果您有任何样品,请分享。
请参考以下代码:
var rootCertPath = path.join('.','.', 'server-root.PEM');
var privateCertPath = path.join('.','.', 'server-private.PEM');
var domainCertPath = path.join('.','.', 'server-domain.PEM');
var rootCert = fs.readFileSync(rootCertPath);
var privateCert = fs.readFileSync(privateCertPath);
var domainCert = fs.readFileSync(domainCertPath);
var buf1 = new Buffer('rootCert');
var buf2 = new Buffer('privateCert');
var buf3 = new Buffer('domainCert');
var chat_proto = grpc.load("Chat.proto").com.company.grpc;
var client = new chat_proto.ChatService('https://servervip:443',grpc.credentials.createSsl(buf1,buf2,buf3));
Chat.proto
syntax = "proto3";
// Service definition.
service ChatService {
// Sends a chat
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer) {}
}
// The request message containing the user's name.
message ChatMessage {
string name = 1;
string message = 2;
}
// The response message containing the greetings
message ChatMessageFromServer {
string name = 1;
string message = 2;
}
//发出请求的代码
var username = process.argv[2];
var stdin = process.openStdin();
function main() {
console.log("starting");
console.log(client); // prints { '$channel': Channel {} }
var chat=client.chat();
chat.on('data', function(msg) {
console.log(msg.name + ': ' + msg.message);
console.log("after message");
});
stdin.addListener('data',function(input) {
chat.write({ name: username, message: input.toString().trim()
});
});
}
main();
【问题讨论】:
-
您能否包含用于实际发出请求的代码?您是否看到任何具体错误?除此之外,您不应该在客户端使用服务器的私钥和证书链数据。你只需要root证书,如果你想做基于TLS的客户端认证,客户端应该有自己的ckeys。
-
按照建议在原始帖子中添加了详细信息 - 请参阅以下部分 // 发出请求的代码 //Chat.proto 我尝试使用仅根证书的方法,但行为仍然相同 我没有任何要求现在验证客户端
-
>> 创建客户端场景一:var client = new chat_proto.ChatService('servervip:443',creds);没有错误但没有响应>>错误创建客户端场景2:var client = new chat_proto.ChatService('servervip',creds); E0519 11312 ssl_transport_security.c:601] 无法加载任何根证书。 E0519 11312 ssl_transport_security.c:1315] 无法加载服务器根证书。 E0519 11312 security_connector.c:837] 握手器工厂创建失败,出现 TSI_INVALID_ARGUMENT。 E0519 11312 secure_channel_create.c:127] 无法为安全名称“servervip”创建安全子通道
-
这看起来像是一个错误。您确定您的根证书文件格式正确吗?
-
是的 - 我在 Windows 上 - 它是 .PEM 文件,如果我只是将其重命名为 .CER,我可以看到证书,如果我尝试使用 opensl 验证 *.PEM 会给我回复 OK