2014-07-25 8 views
1

Tornado serveurméthode problèmes de connexion tornade WSS

ssl_options = { 
     "certfile": "server.crt", 
     "keyfile": "server.key" 
} 
application=Application() 
server=tornado.httpserver.HTTPServer(application,xheaders=True,ssl_options=ssl_options) 
server.listen(tornado.options.options.port) 
tornado.ioloop.IOLoop.instance().start() 

JS Websocket

webSocket = new WebSocket("wss://" + location.hostname + ":8888/socket"); 

La connexion ne se ouvre pas, et l'open() n'est pas appelé, et il n'y a pas d'erreur non plus.

Lorsque vous essayez avec une connexion socket non sécurisé de JS

webSocket = new WebSocket("ws://" + location.hostname + ":8888/socket"); 

Je reçois les erreurs suivantes:

Tornado: 

    [W 140725 11:35:35 iostream:845] SSL Error on 11 ('192.168.0.72', 54554): [Errno 1] _ssl.c:504: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request 


JS: 

    WebSocket connection to 'ws://192.168.0.72:8888/socket' failed: Connection closed before receiving a handshake response 

Cependant lorsque je retire les ssl_options de tornade, et essayer de connexion non sécurisée de JS, ça fonctionne bien.

Tornado: 

    server = tornado.httpserver.HTTPServer(application) 

JS: 

    webSocket = new WebSocket("ws://" + location.hostname + ":8888/socket"); 

Je n'arrive pas à déterminer quel pourrait être le problème et comment procéder.

Répondre

1

Le navigateur essaie probablement de vous montrer la boîte de dialogue "acceptez-vous ce certificat auto-signé", mais ne peut pas parce que la connexion websocket est invisible. Pour utiliser wss: avec un certificat auto-signé, vous devez d'abord visiter une page html régulière avec ce certificat afin de pouvoir l'accepter. Le message d'erreur tornade signifie qu'une requête http est en cours d'envoi vers un port https.

+0

J'avais déjà accepté le certificat, le problème était que j'essayais d'accéder à la page Web sur http au lieu de https. Merci de votre aide. – khizerbajwa

1

Je chargeais le javascript à partir d'une url http, en changeant cela en https résolu le problème.