2017-05-18 2 views
0

Ich habe GRPC Server mit OpenSSL laufe - statisch und ich versuche zu Server mit NodeJS ClientKnoten js-Client für grpc Server

Ich sehe keinen Fehler zu verbinden, aber ich sehe nicht, seine Verbindung zum Server entweder . Bitte teilen Sie, wenn Sie irgendeine Probe haben.

Bitte beachten Sie folgenden Code:

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; 
     } 

// Code eine Anfrage

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(); 
+0

Können Sie den Code, den Sie verwenden, um die Anfrage tatsächlich zu machen? Sehen Sie bestimmte Fehler? Darüber hinaus sollten Sie die Daten des privaten Schlüssels und der Zertifikatskette des Servers nicht auf der Clientseite verwenden. Sie benötigen nur Root-Zertifikate, und wenn Sie eine TLS-basierte Client-Authentifizierung durchführen möchten, sollte der Client eigene Tasten haben. – murgatroid99

+0

hinzugefügt Details in der ursprünglichen Nachricht, wie vorgeschlagen - siehe unten Abschnitte //-Code eine Anfrage //Chat.proto Ich versuchte cert nur Ansatz mit der Wurzel zu machen und immer noch das gleiche Verhalten Ich habe keine Voraussetzung für jetzt zur Authentifizierung des Clients – Nitin

+0

>> Erstellen des Client-Szenarios 1: var client = new chat_proto.ChatService ('https: // servervip: 443', creds); Kein Fehler, aber keine Antwort >> Fehler beim Erstellen des Client-Szenarios 2: var client = new chat_proto.ChatService ('servervip', creds); E0519 11312 ssl_transport_security.c: 601] Konnte kein Wurzelzertifikat laden. E0519 11312 ssl_transport_security.c: 1315] Server-Root-Zertifikate können nicht geladen werden. E0519 11312 security_connector.c: 837] Die Erstellung des Handshaker-Werks ist mit TSI_INVALID_ARGUMENT fehlgeschlagen. E0519 11312 secure_channel_create.c: 127] Fehler beim Erstellen des sicheren Unterkanals für den sicheren Namen 'servervip' – Nitin

Antwort

0

so gut ist neu - unten, was für mich gearbeitet

var rootCertPath = path.join('.','.', 'roots.PEM'); 
var rootCert = fs.readFileSync(rootCertPath); 
var chat_proto = grpc.load("Chat.proto").com.americanexpress.grpc.chat; 
var client = new chat_proto.ChatService('servervip:443',grpc.credentials.createSsl(rootCert)); 

Sieht aus wie ein Problem mit dem Cert - Ich habe die Standard-roots.PEM im Grpc-Client verwendet und es hat für mich funktioniert. wird intern aussehen, um korrekte Wurzel meiner servervip CA Zertifikatskette zu haben.

Vielen Dank für Ihre Unterstützung

Verwandte Themen