node.js douilles.io avec SSL
Je vais essayer d'obtenir socket.io courir avec mon certificat SSL cependant, il ne se connecte pas.
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 de http://domain.com/socket.io/1/?t=1309967919512
Remarque qu'il ne tente pas de 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 débutant.
Merci!
- Est-ce votre client tente de se connecter à un " wss://' préfixé URI.
- non il ne marche pas en arriver là, il en fait la demande à domain.com/socket.io/1/?t=1309967919512 puis meurt.
- Comment êtes-vous en précisant l'adresse à se connecter à? "domain.com" sonne comme un espace réservé dans le support.io client-côté de la bibliothèque. Vous pouvez poster votre client code Javascript que vous utilisez pour vous connecter?
- le projet est sur github: github.com/BCCasino/BCCasino
- essentiellement parce que ses node.js socket.io comme par magie gère le client trucs du côté, tout ce que vous faire est de lancer socket.connecter
- dans github le code en question est test2.js et l'index.jade (backend et frontend respetively)
- J'ai essayé de faire une connexion à l'aide de wss uri, elle me donne URISyntaxException. Aucune idée pourquoi?
Vous devez vous connecter pour publier un commentaire.
Utiliser une URL sécurisée pour votre première connexion, c'est à dire au lieu de "http://" utiliser "https://". Si le WebSocket de transport est choisi, puis de la Prise.IO devrait utiliser "wss://" (SSL) pour la connexion WebSocket trop.
Mise à jour:
Vous pouvez aussi tenter de créer la connexion à l'aide de la "sécuriser" option:
{secure: true}
ne devrait pas être nécessaire si vous spécifiez "https" dans l'url. Voici un extrait de socket.io client sourcesecure: 'https' == uri.protocol
(version 0.9.16), il définit sécurisé option à true si https est détecté dans l'url.{secure: true}
n'était pas nécessaire pour fonctionner correctement.C'est comment j'ai réussi à le mettre en place avec le service express:
J'espère que cela va sauver quelqu'un moment.
Mise à jour : pour ceux qui utilisent permet de chiffrer l'utilisation de cette
var server = https.createServer({ key: fs.readFileSync('/etc/letsencrypt/live/domain.name/privkey.pem'), cert: fs.readFileSync('/etc/letsencrypt/live/domain.name/cert.pem'), ca: fs.readFileSync('/etc/letsencrypt/live/domain.name/chain.pem'), requestCert: false, rejectUnauthorized: false },app); server.listen(3000);
Sur la même note, si votre serveur prend en charge à la fois
http
ethttps
vous pouvez vous connecter en utilisant:à détecter automatiquement le navigateur de schéma et vous connecter en utilisant l'adresse http/https en conséquence. quand en https, le transport sera assuré par défaut, comme la connexion à l'aide
allons utiliser secure sockets web -
wss://
(le{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.
Si votre serveur certifié fichier n'est pas de confiance (par exemple, vous pouvez générer le fichier de clés par vous-même avec keytool commande en java), vous devez ajouter l'option supplémentaire rejectUnauthorized
vérifier ce point.configuration..
Côté serveur:
Côté Client:
C'est mon fichier de configuration de nginx et iosocket code. Server(express) est en écoute sur le port 9191. Il fonctionne bien:
nginx fichier de config:
Serveur:
Client(réagir):
Pour les applications d'entreprise, il convient de noter que vous ne devriez pas être la manipulation de https dans votre code. Il doit être mis à niveau automatique via IIS ou nginx. L'application ne sais pas ce que sont les protocoles utilisés.