小编典典

带有 SSL 的 node.js、socket.io

all

我正在尝试使用我的 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.example/socket.io/1/?t=1309967919512

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

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

如果这是一个简单的问题,我深表歉意,我是 node/socket.io 新手。


阅读 130

收藏
2022-08-01

共1个答案

小编典典

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

更新

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

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