我该如何设置NodeJS的einaros/ws模块以接受wss(安全ws)连接?

12

我正在使用NodeJS的einaros/ws模块,通过WebSocket实现iOS应用和NodeJS服务器之间的实时通信。

该应用程序运行良好,但现在我需要使用wss来保护服务器和iOS应用程序之间的通信。 我有我的Rapid SSL证书和密钥,并在服务器上使用以下代码:

var fs = require('fs');

var cfg = {
    ssl: true,
    port: 8081,
    ssl_key: 'key.key',
    ssl_cert: 'cert.crt'
};

var httpServ = ( cfg.ssl ) ? require('https') : require('http');

var app      = null;

// dummy request processing
var processRequest = function( req, res ) {

    res.writeHead(200);
    res.end("All glory to WebSockets!\n");
};

if ( cfg.ssl ) {

    app = httpServ.createServer({

        // providing server with  SSL key/cert
        key: fs.readFileSync( cfg.ssl_key ),
        cert: fs.readFileSync( cfg.ssl_cert )

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

} else {

    app = httpServ.createServer( processRequest ).listen( cfg.port );
}

// passing or reference to web server so WS would knew port and SSL capabilities
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer( { server: app } );

这段代码基本上就是在GitHub的ws/examples/ssl.js文件中给出的示例,但是由于某些原因NodeJS/ws服务器不接受任何wss套接字连接。

我正在使用正确的路径wss://REMOTE_SERVER_IP:8081/并且我正在使用http://www.websocket.org/echo.html进行测试。

我已经四处搜索了,但似乎没有最新的教程来说明如何使用eniaros/ws设置安全的wss。


那段代码相对较大,所以我想强调的是,使其工作的关键是将 https 实例传递给 new WebSocketServer() 而不仅仅是 {port:80}更多信息在这里。希望这可以帮到你。 - ᴍᴇʜᴏᴠ
1个回答

12

3个月后,我重新审视了这个问题,并解决了这个问题。

代码是正确的。

我的错误在于我试图使用服务器的IP地址(wss://xx.xx.xx.xx:8081)连接客户端,而不是使用证书和密钥发行的子域名(wss://secure.subdoma.in:8081)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接