Je souhaite utiliser des Websockets sécurisés pour améliorer le taux de réussite. Je n'ai pas besoin du cryptage.
Suis-je supposé voir un avertissement lors de l'utilisation de Websockets sécurisés (wss: //example.com) avec un certificat auto-signé? Je l'ai essayé avec Chrome 10 et je ne vois pas d'avertissement et il ne me demande pas d'accepter le certificat. Cela fonctionne.
Est-ce un bogue dans chrome ou le comportement attendu? Pourrai-je utiliser des certificats auto-signés à l'avenir?
Merci
Oui, c'est le comportement actuel de Chrome mais je ne m'attendrais pas à ce que cela continue d'être la politique à l'avenir. Dans Firefox 4 (si vous activez WebSockets dans about: config), vous obtiendrez un avertissement concernant le certificat. Pour approuver le certificat, vous devrez peut-être également saisir l'URL WebSockets dans le navigateur (remplacer wss par https) et l'approuver en premier (car l'avertissement de la connexion WebSockets concernant le certificat auto-signé peut ne pas donner vous l'opportunité de l'approuver).
Je m'attendrais à ce que tous les navigateurs convergent vers le comportement correct qui consiste à afficher une boîte de dialogue d'avertissement qui permet au certificat auto-signé d'être approuvé.
Les certificats auto-signés sont rejetés par Chrome depuis la v19 ( http://crbug.com/53836 ). Si vous essayez de vous connecter à une URL wss qui utilise un certificat auto-signé, puis la demande est abandonnée en silence.
Pour autoriser l'utilisation de certificats auto-signés, démarrez Chrome avec le --ignore-certificate-errors
drapeau, e, g:
chromium --user-data-dir=/tmp/whatever --ignore-certificate-errors
À ma connaissance, il n'y a aucun moyen pour que Firefox accepte votre certificat auto-signé pour wss. Donc, utilisez simplement ws://
pour les tests dans Firefox. Si vous testez votre application Web via https, vous devez basculer une préférence pour autoriser les connexions à (non sécurisé) ws://
URL:
about:config
network.websocket.allowInsecureFromHTTPS
à true
Je l'ai fait fonctionner en suivant ceci:
https://github.com/einaros/ws/blob/master/test/WebSocketServer.test.js#L514
Générez d'abord vos certificats auto-signés:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes
Créez ensuite votre httpsServer à partir d'une application express à l'aide du serveur https intégré du nœud:
var privateKey = fs.readFileSync('sslcert/key.pem', 'utf8');
var certificate = fs.readFileSync('sslcert/cert.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();
//... bunch of other express stuff here ...
//pass in your express app and credentials to create an https server
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(8443);
Ensuite, configurez votre serveur websocket (ironiquement, cela utilisera le même port que le serveur http, je ne le savais pas, mais je suppose que les protocoles peuvent partager des ports? - cela m'avait pendant un certain temps).
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({
server: httpsServer
});
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
Naviguez maintenant vers https://0.0.0.0:8443
serveur et acceptez le certificat auto-signé dans Chrome. Ensuite, les Websockets devraient maintenant fonctionner à l'intérieur du navigateur.
Ouvrez une console chrome devtools et tapez:
var ws = new WebSocket('wss://0.0.0.0:8443');
ws.send('foo');
.... ou n'importe quel port Host: que vous avez utilisé pour httpsServer, la clé ici est que vous utilisez wss://
protocole
Sur votre serveur Web node express, vous devriez voir un message enregistré sur la console. Démarrez le serveur avec node ./server.js
http://www.chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js/