2013-10-08 24 views
2

響應我有一個龍捲風的httpserver初始化像這樣:龍捲風WebSocketHandler將不會對SSL請求

ssl_options = { 
    "certfile": "mycert.crt", 
    "keyfile": "mykey.key" 
} 
server = tornado.httpserver.HTTPServer(application, xheaders=True, 
     ssl_options=ssl_options) 

它有一個open()方法WebSocketHandler。

當我嘗試打開從Chrome 30控制檯通過JavaScript安全WebSocket連接,像

var sock = new WebSocket("wss://localhost:9001/mywebsocket"); 

連接沒有成功打開,沒有日誌輸出,WebSocketHandler的open()不叫。

如何打開並維護與Tornado中的Javascript客戶端的安全(SSL)WebSocket連接?

試圖在龍捲風日誌以下錯誤輸出不安全的連接,像

var sock = new WebSocket("ws://localhost:9001/mywebsocket"); 

結果:

2013-10-08 13:59:55,305 tornado.general 820 : SSL Error on 8 ('192.168.149.27', 62851): [Errno 1] _ssl.c:490: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request 

此外,在這種情況下,連接未成功和open() ISN打開不叫。

附加信息:錯誤消息中的IP(以上示例中的62851)之後的數字隨着每個請求的安全或其他情況而增加。我不知道這個號碼是什麼,但它確實表明請求至少到達服務器。

此外,從構造函數中刪除ssl_options,並向服務器發送不安全請求(ws://)可修復此問題。

正在使用的證書是自簽名的。要通過curl與服務器的HTTP端點進行通信,我必須使用--insecure標誌。

回答

1

如果您從javascript控制檯開始連接,瀏覽器將沒有機會向您顯示自簽名證書警告並給您一個接受它的機會。如果您先去https://localhost:9001並在那裏接受證書,它是否有效?