2017-02-03 11 views
0

В настоящее время я пишу приложение NS, которое будет связываться с WebSocket через SSL. Вот код сервера (server.js):Есть ли способ общаться с WebSocket через SSL из приложения NativeScript?

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

Сервер работает без проблем. Ниже приведен код клиента (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); 
    }); 
}); 

Когда я запускал клиент, набрав node wsclient.js, это бросить следующее сообщение об ошибке:

Error: unable to verify the first certificate

Очевидно, что ошибка была вызвана не предоставление информации о сертификате в запрос. Но я не знаю, как это сделать в моем клиентском коде. Большое спасибо за любые подсказки или предложения.

ответ

0

Наконец-то я нашел ответ:

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

Сейчас он работает!