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

时间:2014-07-02 07:34:19

标签: node.js web-services ssl websocket wss

我使用NodeJS的eniaros/ws模块使用网络套接字在iOS应用和NodeJS服务器之间实时通信。

该应用运行正常,但现在我必须使用wss保护服务器和iOS应用之间的通信。我有快速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的最新教程。

1 个答案:

答案 0 :(得分:12)

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

代码正确。

我的错误是我尝试使用服务器的IP连接客户端(wss://xx.xx.xx.xx:8081),而不是使用颁发证书和密钥的子域(wss) ://secure.subdoma.in:8081)