1
我想連接到我的websocket服務器,我基本需要通過https。WebSocket連接到自簽名服務器
from tornado.options import define, options
from imaplib import Commands
define("port", default=443, help="run on the given port", type=int)
class WebSocketHandler(tornado.websocket.WebSocketHandler):
def __init__(self, *args, **kwargs):
super(WebSocketHandler, self).__init__(*args, **kwargs);
pass;
def open(self):
print 'new connection'
self.write_message("connected")
def on_message(self, message):
print 'message received %s' % message
self.write_message('message received %s' % message)
def on_close(self):
print 'connection closed'
def check_origin(self, origin):
return True;
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(
handlers=[
(r"/ws", WebSocketHandler)
]
)
data_dir = "/home/pi/projects/WebSocketOverHttps/";
httpServer = tornado.httpserver.HTTPServer(app, ssl_options = {
"certfile": os.path.join(data_dir, "cert.crt"),
"keyfile": os.path.join(data_dir, "key.key"),
});
httpServer.listen(options.port)
print "Listening on port:", options.port
tornado.ioloop.IOLoop.instance().start()
的問題是,我的瀏覽器說:「WebSocket連接到‘WSS://192.168.1.8/ws’失敗:打開的WebSocket握手被取消」
什麼,我試圖做的一件事就是: 1)系統(贏8.1 PRO x64)的通過雙擊證書文件添加證書 2)添加證書Google Chrome瀏覽器在同一系統上(通過瀏覽器的設置)
我能夠連接到這臺服務器當我重新實現它使用http而不是https,所以物理連接到機器看起來OK。
我的證書是自簽名的,由命令生成:
sudo openssl req -x509 -nodes -days 365000 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
這是我嘗試連接到它:
var socket = new WebSocket("wss://192.168.1.8:443/ws");
您有什麼版本的Chrome? IIRC,他們在一個版本中添加了「拒絕自簽名證書」修復,並在稍後添加了「在wss和https之間共享可接受的自簽名證書」,並且在之間基本上沒有辦法指定可接受的自簽名證書wss(全球忽略證書錯誤是唯一真正的解決方法)。 – abarnert 2014-10-31 23:10:44
另外,我不認爲這個問題與你的代碼有任何關係。您可能想嘗試(a)在不使用python和tornado標籤的情況下搜索相似的問題,並且(b)查看您是否可以使用通用wss服務器(例如netcat的ws代理)重現問題。 – abarnert 2014-10-31 23:12:00
「38.0.2125.111米」是我的Chrome版本 – Puchacz 2014-10-31 23:27:33