gpt4 book ai didi

python - WebSocket 连接到自签名服务器

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:32 25 4
gpt4 key购买 nike

我想连接到我的 websocket 服务器,我基本上需要通过 https。

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()

问题是我的浏览器显示:“与‘wss://192.168.1.8/ws’的 WebSocket 连接失败:WebSocket 打开握手被取消”

我尝试做的事情是:1)通过双击证书文件将证书添加到系统(win 8.1 PRO x64)2) 将证书添加到同一系统上的谷歌浏览器(通过浏览器设置)

当我重新实现它以使用 http 而不是 https 时,我能够连接到此服务器,因此与机器的物理连接看起来没问题。

我的证书是自签名的,由命令生成:

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");

最佳答案

正如@BenDarnell 发布的那样,我们必须通过浏览此服务器的页面来接受此证书。然后您的浏览器将通知该站点不受信任。让您的浏览器使用这个不受信任的证书,仅此而已。这是您需要放入代码中的代码:

class MainHandler(tornado.web.RequestHandler):
def get(self):
loader = tornado.template.Loader(".")
self.write(loader.load("index.html").generate());

app = tornado.web.Application(
handlers=[
(r"/ws", WebSocketHandler),
(r"/", MainHandler)
])

data_dir = "/home/pi/projects/Something";
ssl_options_dict = {
"certfile": os.path.join(data_dir, "cert.crt"),
"keyfile": os.path.join(data_dir, "key.key"),
};

httpServer = tornado.httpserver.HTTPServer(app, ssl_options = ssl_options_dict);

关于python - WebSocket 连接到自签名服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com