2012-08-01 2 views
31

Nous avons un serveur websocket sur le port 8080 configuré sur une boîte Linode. Chrome et Opera fonctionnent très bien. Firefox se plaint cependant que l'opération n'est pas sûre.Problème de sécurité de Firefox Websocket

« L'opération est précaire: Code 18 »

Si je tente de créer un nouvel objet WebSocket dans la console Web avant que la page est chargée tout va bien. Cependant, après que la page charge quelque chose est vissée, je ne peux plus créer l'objet. Voir la capture d'écran ci-jointe. Je n'ai aucune idée de ce que l'opération n'est pas sûre ou même comment faire pour diagnostiquer ceci.

+1

Je devrais noter que cela fonctionne très bien en mode de développement se connectant à localhost. Le serveur Websocket est exposé directement à Internet sur Linode – bcardarella

+0

S'agit-il d'une nouvelle version de Firefox? Ils ont désactivé Websockets pour quelques versions en raison de problèmes de sécurité. – Dreen

+0

@Déco c'est le dernier mais comme vous pouvez le voir en haut de la capture d'écran je peux établir une connexion Websoccket sans problème avant de charger la page – bcardarella

Répondre

31

J'ai corrigé ceci. L'application elle-même est sous SSL mais la websocket en cours d'accès ne l'est pas. Chrome et Opera s'en fichent, mais Firefox le fait. Selon:

https://bugzilla.mozilla.org/show_bug.cgi?id=303952

Ceci est connu et est pas considéré comme un bug. La réponse de Mozilla: wontfix

Solution, mettez le serveur sous websocket SSL et utilisez WSS: //

+1

Vous pouvez accepter cela. – mac01021

+4

Pouvez-vous fournir des informations sur la façon de 'mettre le serveur websocke sous SSL et utiliser wss: //' Je ne sais pas exactement ce que vous voulez faire. – Leeish

+0

@Leeish Pour utiliser un client websocket sécurisé, spécifiez simplement l'URL avec 'wss: //'.Pour activer SSL/TLS sur le serveur, vous devez vous référer à la documentation du serveur websocket que vous utilisez. Il est possible que TLS ne soit pas supporté. – newprogrammer

1

Ceci est une intuition basée sur des informations limitées, et je devrais probablement mettre cela dans un commentaire, mais je n'ai pas assez de points de réputation pour le faire encore. En regardant votre journal, il semble que 24 secondes passent de la réception de [object Websocket] (heure 17: 46: 36.683) jusqu'à ce que vous obtenez The connection to ws://..... (heure 17: 47: 00: 952) message d'erreur.Le long retard me conduit à croire que le serveur pourrait sortir et fermer la connexion websocket. Regardez this answer pour une solution potentielle.

+0

Si tel est le cas alors pourquoi Chrome et Opera fonctionnent-ils bien? – bcardarella

+0

bon point, probablement pas un timeout côté serveur à moins que le serveur ne réagisse différemment aux différents user-agents, ce qui est peu probable ... – laker

+0

En fait, il est possible que le même délai expire, quel que soit le navigateur, mais Seul Firefox signale une erreur securityError. Les autres navigateurs rétablissent-ils une connexion Web? BTW est-il compatible avec WebSocket? Une recherche rapide google fourni aucune information concluante – laker

32

Comme vous le soulignez dans une autre réponse, https: // à ws: // est refusé par défaut sur Firefox.

Aller à l'adresse de Firefox: config et toggling network.websocket.allowInsecureFromHTTPS va se débarrasser de l'SecurityError.

+0

Ouais cela a fonctionné! Au moins, il existe une solution de contournement pour gérer la mauvaise restriction de Firefox. –

+4

@FaisalMushtaq: ce n'est pas une "mauvaise restriction" mais une véritable pratique de sécurité. – berkes