简体   繁体   中英

Is there a way to communicate with WebSocket over SSL from NativeScript app?

Currently I am writing a NS app that will communicate with a WebSocket over SSL. Here is server's code (server.js):

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 is running well without problem. Below is the client code (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);
  });
});

When I ran the client by typing node wsclient.js , it throw the following error:

Error: unable to verify the first certificate

Obviously, the error was caused by not providing the certificate info to the request. But I have no idea how to get this done in my client code. Thanks a lot for any clues or suggestions.

Finally I found the answer:

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

Now it works!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM