184 votes

node.js, socket.io avec SSL

Je vais essayer d'obtenir socket.io courir avec mon certificat SSL toutefois, il ne pourra pas se connecter.

J'ai basé mon code de fermer l'exemple de discussion:

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});
...

Si je supprime le SSL code, il fonctionne très bien, mais avec ce que je reçois une demande d' http://domain.com/socket.io/1/?t=1309967919512

il ne cherche pas https, ce qui provoque l'échec.

Je suis en essais sur chrome, puisque c'est le navigateur cible pour cette application.

Je m'excuse si c'est une simple question, je suis un node/socket.io newb.

Merci!

197voto

kanaka Points 23143

Utiliser une URL sécurisée pour votre connexion initiale, c'est-à-dire au lieu de « http:// » utilisation « https:// ». Si le transport de WebSocket est choisi, Socket.IO devrait utiliser automatiquement « wss : / / » (SSL) pour la connexion de WebSocket trop.

Mise à jour:

Vous pouvez également essayer de créer la connexion à l’aide de l’option « confiance » :

35voto

Kuf Points 5775

Sur la même note, si votre serveur prend en charge les deux http et https vous pouvez vous connecter en utilisant:

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

pour détecter automatiquement le navigateur de système et de se connecter à l'aide de http/https en conséquence. quand en https, le transport sera assuré par défaut, la connexion à l'aide

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

allons utiliser secure sockets web - wss:// ( {secure: true} est redondant).

pour plus d'informations sur la façon de servir à la fois les protocoles http et https facilement en utilisant le même nœud serveur découvrez cette réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X