How to set secure websocket connection using websocket-server and node.js

2,559 views
Skip to first unread message

Mikhail

unread,
Aug 29, 2011, 2:33:26 AM8/29/11
to nodejs
I can't set secure websocket connection using websocket-server and
node.js

server side

var ws = require("websocket-server"),
fs = require('fs');

var options = {
key: fs.readFileSync(PRIVATE_KEY),
cert: fs.readFileSync(CERTIFICATE)
};

// create web server
var server = ws.createServer(options);
server.listen(8000);
...
client side (google chrome)

<script language="javascript" type="text/javascript">
var wsUri = "wss://my_url:8000";


function init() {
websocket = new WebSocket(wsUri);
}

...

window.addEventListener("load", init, false);
</script>
But if I change protocol to ws it works fine (var wsUri = "ws://url:
8000")
Any ideas?

Micheil Smith

unread,
Aug 29, 2011, 6:47:52 PM8/29/11
to nod...@googlegroups.com
Hi,

I'm not sure if you've seen the project's issue tracker [1], but this is a known issue, it
broke after the changes that occurred in the HTTP/HTTPS refactor a while back,
and I haven't yet had time to fix it.

Expect it in 2.1.XX.

[1] http://github.com/miksago/node-websocket-server/issues

Regards,
Micheil Smith,
node-websocket-server maintainer / author.

> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nod...@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+un...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en

Vojto Rinik

unread,
Aug 29, 2011, 9:55:05 PM8/29/11
to nodejs

Raymond Rugemalira

unread,
Jun 8, 2016, 2:11:59 PM6/8/16
to nodejs

Mikhail, this worked for me:

In /bin/www

var app = require('../app');
var https = require('https');
var fs = require('fs');

var sslOptions = {
    key: fs.readFileSync('./ssl/server.key'),
    cert: fs.readFileSync('./ssl/server.crt'),
    ca: fs.readFileSync('./ssl/ca.crt'),
    requestCert: true
};

var host = '127.0.0.1'; 
var port = '3000';

var ws_cfg = {
    ssl: true,
    port: port,
    ssl_key: './ssl/server.key',
    ssl_cert: './ssl/server.crt',
    ssl_ca: '../ssl/ca.crt'
};
var processRequest = function (req, res) {
    console.log("Server listening on https://" + host + ":%s", port);
};

var secureServer = https.createServer(sslOptions, app).listen(port, function () {
    console.log("Server listening on https://" + host + ":%s", port);
}, processRequest).listen(ws_cfg.port);
var ws = require('/usr/local/lib/node_modules/websocket.io');
var WebSocketServer = require('/usr/local/lib/node_modules/websocket.io').Server;
var wss = new WebSocketServer({
    server: secureServer,
    autoAcceptConnections: false
});
var webSocketServer = ws.attach(secureServer);

In js client-side

var wsConnection = new WebSocket("wss://localhost:3000");
wsConnection.onopen = function () {
  alert("I'm the client and I'm listening on an open socket!");
    var socketMessageToServer = {};
    socketMessageToServer.text = "I'm the client and I'm listening on an established socket!";
    // Send an initial message to the server
    wsConnection.send(JSON.stringify(socketMessageToServer));
};

Here is where I can't make it work:
I'd like to receive socketMessageToServer in app.js on server side. How do I do that?
Let me know.

Raymond Rugemalira

unread,
Jul 12, 2016, 12:48:21 PM7/12/16
to nodejs
// Make webSocketServer exportable add following in /bin/www

module.exports = {
createWebSocket: function () {
return webSocketServer;
}
};

// Then in app.js import webSocketServer from www as follows:
var www = require('./bin/www');
var webSocketServer = www.createWebSocket();
// Check we have imported webSocketServer
console.log("webSocketServer is: ");
console.dir(webSocketServer);

Reply all
Reply to author
Forward
0 new messages