欢迎访问宙启技术站
智能推送

Tornado框架中HttpServer的HTTPS支持配置指南

发布时间:2023-12-22 20:33:34

要在Tornado框架中配置HttpServer的HTTPS支持,需要进行以下步骤:

1. 生成自己的SSL证书

- 在Linux或Mac系统中,可以使用OpenSSL工具生成自己的SSL证书。 打开终端并导航到适当的目录,在终端中运行以下命令生成私钥文件:

     openssl genrsa -out private.key 2048
     

- 然后生成证书请求(CSR)文件:

     openssl req -new -key private.key -out cert.csr
     

- 最后,使用这些生成的文件生成自签名证书:

     openssl x509 -req -days 3650 -in cert.csr -signkey private.key -out certificate.crt
     

2. 创建Tornado的HTTPServer对象

   import tornado.httpserver
   import tornado.ioloop
   import tornado.web
   import ssl
   
   class MainHandler(tornado.web.RequestHandler):
       def get(self):
           self.write("Hello, world")
   
   def make_app():
       return tornado.web.Application([
           (r"/", MainHandler),
       ])
   
   if __name__ == "__main__":
       app = make_app()
       http_server = tornado.httpserver.HTTPServer(app)
       http_server.listen(8888)
       tornado.ioloop.IOLoop.current().start()
   

3. 创建SSLContext对象并加载证书和私钥文件

   ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
   ssl_ctx.load_cert_chain(certfile="certificate.crt", keyfile="private.key")
   

4. 将SSLContext对象传递给HTTPServer对象

   http_server = tornado.httpserver.HTTPServer(app, ssl_options=ssl_ctx)
   

5. 配置Listen的端口和SSL选项

   http_server.listen(8888, ssl_options=ssl_ctx)
   

完整的示例代码如下所示:

import tornado.httpserver
import tornado.ioloop
import tornado.web
import ssl

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    ssl_ctx.load_cert_chain(certfile="certificate.crt", keyfile="private.key")
    http_server = tornado.httpserver.HTTPServer(app, ssl_options=ssl_ctx)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.current().start()

在使用此代码运行Tornado应用程序后,可以通过https://localhost:8888/访问应用程序,并且浏览器会向用户展示访问网站的安全警告,因为此证书是自签名证书。