I tengo trabajo siguiendo este:
https://github.com/einaros/ws/blob/master/test/WebSocketServer.test.js#L514
Fi en primer lugar generar sus certs de firma propia:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes
Entonces cree su httpsServer de una aplicación expresa usando el nodo integrado en HTTPS:
var privateKey = fs.readFileSync('sslcert/key.pem', 'utf8');
var certificate = fs.readFileSync('sslcert/cert.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();
//... bunch of other express stuff here ...
//pass in your express app and credentials to create an https server
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(8443);
A continuación, la configuración de su servidor de WebSocket (irónicamente esto va a usar el mismo puerto como el servidor http, no sabía esto pero supongo que los protocolos pueden compartir puertos? - esto me tuvo por un tiempo).
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({
server: httpsServer
});
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
ahora Navegar a https://0.0.0.0:8443
servidor y aceptar el certificado autofirmado en Chrome. Entonces websockets ahora debería funcionar isnide el navegador.
Abra una consola de cromo y devtools Tipo:
var ws = new WebSocket('wss://0.0.0.0:8443');
ws.send('foo');
.... o lo que sea anfitrión: puerto que se utilizó para httpsServer, la clave aquí es que está utilizando el protocolo wss://
En el nodo express web server debería ver un mensaje registrado en la consola. Iniciar el servidor con node ./server.js
http://www.chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js/
¿Sabe si el próximo proyecto websockets mejora la tasa de éxito de WebSockets no seguros? – pablo
Probablemente no. Los principales cambios se refieren al encuadre de los datos (basado en la longitud en lugar de en el delimitador) y los datos del cliente al servidor no están enmascarados para abordar el problema intermedio que funciona mal. Los puertos 80 y 443 siguen siendo los puertos estándar de WebSockets y el saludo de manos sigue siendo similar a HTTP. ¿Cuál es el problema que está viendo al hacer que WebSockets no se conecte por usted? – kanaka
Me refiero a http://www.ietf.org/mail-archive/web/hybi/current/msg01605.html. Dice que el puerto 80 tiene solo una tasa de éxito del 63%, mientras que el puerto 443 tiene una tasa de éxito del 95%. También estoy obligado a usar el puerto 443 o 8080 porque estoy usando nginx como proxy y no es compatible con HTTP 1.1. El puerto 443 requiere un certificado que complica las cosas y tal vez un poco por encima. No estoy seguro de cuántos usuarios tienen bloqueado el puerto 8080. – pablo