一尘不染

使用SSL的node.js,socket.io

node.js

我正在尝试使用我的SSL证书运行socket.io,但是它将无法连接。

我基于聊天示例创建代码:

var https = require('https');
var fs = require('fs');
/**
 * Bootstrap app.
 */
var sys = require('sys')
require.paths.unshift(__dirname + '/../../lib/');

/**
* Module dependencies.
*/

var express = require('express')
  , stylus = require('stylus')
  , nib = require('nib')
  , sio = require('socket.io');

/**
 * App.
 */
var privateKey = fs.readFileSync('../key').toString();
var certificate = fs.readFileSync('../crt').toString();
var ca = fs.readFileSync('../intermediate.crt').toString();

var app = express.createServer({key:privateKey,cert:certificate,ca:ca });


/**
 * App configuration.
 */

...

/**
 * App routes.
 */

app.get('/', function (req, res) {
  res.render('index', { layout: false });
});

/**
 * App listen.
 */

app.listen(443, function () {
  var addr = app.address();
  console.log('   app listening on http://' + addr.address + ':' + addr.port);
});

/**
 * Socket.IO server (single process only)
 */

var io = sio.listen(app,{key:privateKey,cert:certificate,ca:ca});
...

如果我删除SSL代码,它运行正常,但是与此同时,我收到了一个请求,请求http://domain.com/socket.io/1/?t=1309967919512

请注意,它没有尝试使用https,这会导致它失败。

我正在测试chrome,因为它是该应用程序的目标浏览器。

抱歉,这是一个简单的问题,我是node / socket.io新手。

谢谢!


阅读 219

收藏
2020-07-07

共1个答案

一尘不染

使用安全的URL进行初始连接,即使用“ https://”代替“ http://”。如果选择了WebSocket传输,则Socket.IO也应自动将“
wss://”(SSL)用于WebSocket连接。

更新

您也可以尝试使用“安全”选项创建连接:

var socket = io.connect('https://localhost', {secure: true});
2020-07-07