Node.js、Socket.IO:如何使用SSL?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我试图让Socket.IO使用我的SSL证书运行,但是它不会连接。

我是根据聊天示例编写的代码编写的:

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代码,它将运行良好,但是使用它,我会得到一个请求...

注意,它没有尝试https,这导致了它的失败。

我在Chrome上进行测试,因为它是这个应用程序的目标浏览器。

提问于
用户回答回答于

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

var socket = io.connect('https://localhost', {secure: true});
用户回答回答于

如果您的服务器同时支持这两种httphttps您可以使用以下方式进行连接:

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

相应地使用http/https进行连接。在https中,传输将被默认保护,就像使用

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

将使用安全的网络套接字-wss://((){secure: true})。

扫码关注云+社区