1. ホーム
  2. ssl

[解決済み] node.js、socket.ioのSSL化

2022-04-20 22:24:07

質問

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コードを削除すると正常に実行されますが、SSLコードを使用すると、次のようなリクエストが発生します。 http://domain.com/socket.io/1/?t=1309967919512

httpsを試さないので、失敗することに注意してください。

このアプリケーションのターゲットブラウザであるため、クロームでテストしています。

node/socket.io初心者なので、素朴な疑問でしたら申し訳ありません。

ありがとうございます。

解決方法は?

最初の接続には安全な URL を使用します。つまり、"http://" の代わりに "https://" を使用します。WebSocket トランスポートを選択した場合、Socket.IO は自動的に WebSocket 接続にも "wss://" (SSL) を使用するはずです。

更新情報 :

また、「セキュア」オプションを使用して接続を作成してみることもできます。

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