web-dev-qa-db-fra.com

La connexion WebSocket sur wss a échoué

J'ai acheté un certificat et installé sur mon site Web node.js.Mais le https du navigateur s'affiche en vert et est OK.Maintenant, j'essaie d'établir une connexion de socket à l'aide de wss, mais cela a échoué. sur le côté du client Javascript est comme ça. 

   WebSocket connection to 'wss://securedsitedotcom:3003/call' failed:        
   WebSocket opening handshake was canceled

S'il vous plaît aider!

Code côté client (Javascript)

var ws = new WebSocket('wss://securedsitedotcom:3003/call');

Code côté serveur (node.js)

 https = require('https');
 var server = https.createServer({
    key: fs.readFileSync(config.certKeyPath),
    cert: fs.readFileSync(config.certCrt),
    requestCert: true,
    rejectUnauthorized: false
 },app);
 server.listen(port);
 var wss = new ws.Server({
   server: server,
   path: '/call'
 });

Erreur sur la console du navigateur:

WebSocket connection to 'wss://securedsitedotcom:3003/call' failed:          

WebSocket opening handshake was canceled
6
Thabung

J'ai rencontré un problème similaire, mais j'utilisais un certificat auto-signé. Vous avez mentionné que vous avez acheté un certificat. Je l'invite, il est signé par l'autorité de certification. 

Sinon, comme dans mon cas, un certificat non validé peut provoquer une erreur "L'ouverture de négociation a été annulée". Un certificat validé est soit validé par un tiers (autorité de certification, c'est-à-dire VeriSign), soit explicitement autorisé par le client.

Dans mon cas, VeriSign n'a pas signé mon certificat (auto-signé), je devais donc l'autoriser explicitement. Pour ce faire, je dois simplement visiter l'URL https avec le navigateur (dans votre cas, " https: // securedsitedotcom: 3003/call "). Ensuite, un "avertissement non autorisé hôte" apparaît. Vous devez autoriser l'exception et pouvoir établir votre connexion WSS.

Votre serveur peut utiliser n’importe quel port. Il n’est pas lié à 443. 443 est le port par défaut pour https, mais tout port peut être spécifié explicitement, comme vous l’avez fait.

J'espère que ça aide quelqu'un.

3
w4rt3r

Des travaux récents avec Chrome ont révélé que, si une page est servie en tant que https sur Chrome, Websockets doit utiliser wss. Et si wss doit être utilisé, le port 443 doit être utilisé (et pour démarrer, aucun autre port sécurisé et jusqu'à présent, je n'ai vu aucun moyen de changer le port), ce qui peut être votre problème puisque votre port ressemble à 3003 ci-dessus.

Actuellement, j'essaie de demander à mon groupe informatique de corriger/mettre à niveau Apache sur ce serveur afin que mod_proxy_wstunnel puisse être utilisé pour faire en sorte qu'Apache écoute sur 443 un proxy inverse et transmette tout le trafic wss à mon serveur Websocket.

J'espère que cela t'aides.

2
sjcard