Socket.io et SSL

Petite note rapide sur l'utilisation de SSL avec Socket.io. Voici le code qui marche :


'use strict';

// Getting server, socket and redis
var fs = require('fs');
var app = require('express')();
var https = require('https');
var options = {
  key: fs.readFileSync('/home/raphael/nodekeys/key.pem'),
  cert: fs.readFileSync('/home/raphael/nodekeys/cert.pem'),
  requestCert: true
};
var server = https.createServer(options, app);
var io = require('socket.io').listen(server);
var redis = require('socket.io-redis');

// Adapter SocketIO - Redis
io.adapter(redis({ host: '127.0.0.1', port: 6379 }));

// On socket connexion
io.on('connection', function(socket){
    // Canal "modification"
    socket.on('modification', function(msg){
        // Emit
        io.emit('modification', msg);
    });
});

server.listen(8081);

La clef et le certificat doivent etre valables - pour ma part, c'est du Let's encrypt.

Coté client, ça donne ça :


<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script>
$(document).ready(function() {

  var socket = io('https://mondomaine.com:8081', {secure: true});

  socket.on('modification', function (data) {
	// Trucs à faire une fois le message reçu via le canal "modification"
  });
});
</script>

Voili voilà, le truc pas rigolo, c'est quand on doit gérer plusieurs environnements (développement, prod, staging, etc.) Ça se règle avec des variables propres à chaque environnement...