2017-02-03 2 views
0

Zur Zeit schreibe ich eine NS-Anwendung, die mit einem WebSocket über SSL kommunizieren. Hier ist Server-Code (server.js):Gibt es eine Möglichkeit mit WebSocket über SSL von NativeScript App zu kommunizieren?

var fs = require('fs'); 
var cfg = { 
port: 8082, 
ssl_key: fs.readFileSync('keys/server.key'), 
ssl_cert: fs.readFileSync('keys/server.crt'), 
ca: fs.readFileSync('keys/ca.crt') 
}; 

var httpServ = require('https'); 

var WebSocketServer = require('ws').Server; 
var app = null; 

// dummy request processing 
var processRequest = function(req, res) { 
    res.writeHead(200); 
    res.end("All glory to WebSockets!\n");     
}; 

app = httpServ.createServer({ 

     // providing server with SSL key/cert 
     key: cfg.ssl_key, 
     cert: cfg.ssl_cert, 
     ca: cfg.ssl.ca, 
     passphrase: '1234', 
     requestCert: true, 
     rejectUnauthorized: false, 

     }, processRequest).listen(cfg.port); 

var wss = new WebSocketServer({ server: app }); 

wss.on('connection', function(ws) { 
console.log("Connected!"); 
ws.on('message', function(message) { 
console.log('received: %s', message); 
}); 
ws.send('something'); 
}); 

Server läuft gut ohne Problem. Unterhalb der Client-Code ist (wsclient.js):

const WebSocket = require('ws'); 
const ws = new WebSocket('wss://localhost:8082'); 
ws.on('open', function open() { 
    ws.send("dummy"); 
    ws.on('error', function(evt) { 
     console.log("The socket had an error", evt.error); 
    }); 
}); 

Wenn ich durch die Eingabe node wsclient.js den Client lief, es den folgenden Fehler aus:

Error: unable to verify the first certificate

Offensichtlich wurde der Fehler durch nicht verursacht Bereitstellung der Zertifikatsinformationen für die Anfrage. Aber ich habe keine Ahnung, wie ich das in meinem Client-Code erledigen kann. Vielen Dank für Hinweise oder Vorschläge.

Antwort

0

Schließlich fand ich die Antwort:

const WebSocket = require('ws'); 
const ws = new WebSocket('wss://localhost:8082',{ 
    key: fs.readFileSync('./keys/client.key'), 
    cert: fs.readFileSync('./keys/client.crt'), 
    ca: fs.readFileSync('./keys/ca.crt') 
}); 
ws.on('open', function open() { 
    ws.send("dummy"); 
    ws.on('error', function(evt) { 
     console.log("The socket had an error", evt.error); 
    }); 
}); 

Jetzt funktioniert es!

Verwandte Themen