帶有SSL的node.js,socket.io


1 Answers

同樣的說明,如果你的服務器同時支持httphttps你可以使用:

var socket = io.connect('//localhost');

自動檢測瀏覽器方案並相應地使用http / https進行連接。 當在https中時,運輸將被默認保護,如連接使用

var socket = io.connect('https://localhost');

將使用安全的Web套接字wss://{secure: true}是多餘的)。

有關如何使用同一個節點服務器輕鬆地為http和https服務的更多信息,請查看此答案

Question

我試圖讓我的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,因為它是此應用程序的目標瀏覽器。

我很抱歉,如果這是一個簡單的問題,我是一個節點/ socket.io新手。

謝謝!




如果您的服務器認證文件不可信(例如,您可以自己使用java中的keytool命令生成密鑰存儲庫),則應該添加額外的選項rejectUnauthorized

var socket = io.connect('https://localhost', {rejectUnauthorized: false});



Related