使用Tornado搭建HTTPS网站

安装openssl

sudo apt install openssl
确认openssl.cnf所在目录/etc/ssl

生成SSL证书

生成服务器端的私钥(key文件)

$ openssl genrsa -des3 -out server.key 1024
去除key文件口令的命令
$ openssl rsa -in server.key -out server.key

生成CSR文件

$ openssl req -new -key server.key -out server.csr -config /etc/ssl/openssl.cnf

对客户端也作同样的命令生成key及csr文件

$ openssl genrsa -des3 -out client.key 1024
$ openssl req -new -key client.key -out client.csr -config /etc/ssl/openssl.cnf

CA的签名

新建目录 ca、ca/certs、ca/newcerts
在ca下建立一个空文件 index.txt
在ca下建立一个文本文件 serial, 内容0000
在ca下openssl req -new -x509 -keyout ca.key -out ca.crt -config /etc/ssl/openssl.cnf

用生成的CA的证书为刚才生成的server.csr,client.csr文件签名

$ openssl ca -in server.csr -out server.crt -cert ca/ca.crt -keyfile ca/ca.key -config /etc/ssl/openssl.cnf

$ rm ca/index.txt
$ touch ca/index.txt

$ openssl ca -in client.csr -out client.crt -cert ca/ca.crt -keyfile ca/ca.key -config /etc/ssl/openssl.cnf

应对Enter PEM pass phrase的提示

openssl rsa -in server.key -out server.key.unsecure
服务器改用这个server.key.unsecure就不会每次提示了

在Tornado网站中开启HTTPS

import os.path

from tornado import httpserver
from tornado import ioloop
from tornado import web

class TestHandler(web.RequestHandler):
    def get(self):
        self.write("Hello, World!")

def main():
    settings = {
        "static_path": os.path.join(os.path.dirname(__file__), "static"),
    }
    application = web.Application([
        (r"/", TestHandler),
    ], **settings)
    server = httpserver.HTTPServer(application, ssl_options={
           "certfile": os.path.join(os.path.abspath("."), "server.crt"),
           "keyfile": os.path.join(os.path.abspath("."), "server.key"),
    })
    server.listen(8000)
    ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

参考

使用 Tornado 搭建 WebSocket 客户端,可以按照以下步骤进行: 1. 安装 Tornado 使用 pip 安装 Tornado: ``` pip install tornado ``` 2. 编写客户端代码 在 Tornado 中,可以使用 `websocket.WebSocketClientConnection` 类来创建 WebSocket 客户端连接。以下是一个简单的例子: ```python import tornado.websocket import tornado.ioloop class MyWebSocketClient(tornado.websocket.WebSocketClientConnection): def on_message(self, message): print("Received message: {}".format(message)) def on_close(self): print("Connection closed") if __name__ == "__main__": ws_url = "ws://example.com/socket" ws_client = MyWebSocketClient(ws_url) ws_client.connect() tornado.ioloop.IOLoop.current().start() ``` 在这个例子中,我们创建了一个名为 `MyWebSocketClient` 的类,继承自 `WebSocketClientConnection`。我们重载了 `on_message` 和 `on_close` 方法来处理消息和关闭事件。在 `main` 函数中,我们创建了一个 `MyWebSocketClient` 对象,并调用了 `connect` 方法来建立连接。最后,我们启动了 Tornado 的 I/O 循环。 3. 运行客户端代码 运行客户端代码,即可建立 WebSocket 连接并接收来自服务器的消息。如果你想发送消息,可以使用 `write_message` 方法。例如,在 `MyWebSocketClient` 类中添加以下方法: ```python def send_message(self, message): self.write_message(message) ``` 然后,在 `main` 函数中调用 `ws_client.send_message("hello")` 就可以发送消息了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值