如何创建HTTPS Tornado服务器

28
请帮我创建一个HTTPS Tornado服务器,我的当前Python3代码不能正常工作。
import os, socket, ssl, pprint, tornado.ioloop, tornado.web, tornado.httpserver
from tornado.tcpserver import TCPServer

class getToken(tornado.web.RequestHandler):
    def get(self):
        self.write("hello")

application = tornado.web.Application([
    (r'/', getToken),
])

# implementation for SSL
http_server = tornado.httpserver.HTTPServer(application)

TCPServer(ssl_options={
    "certfile": os.path.join("/var/pyTest/keys/", "ca.csr"),
    "keyfile": os.path.join("/var/pyTest/keys/", "ca.key"),
})

if __name__ == '__main__':
    #http_server.listen(8888)
    http_server = TCPServer()
    http_server.listen(443)
    tornado.ioloop.IOLoop.instance().start()

HTTPS 对我非常重要,请帮忙

1个回答

50

无需使用 TCPServer

尝试以下方法:

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

class getToken(tornado.web.RequestHandler):
    def get(self):
        self.write("hello")

application = tornado.web.Application([
    (r'/', getToken),
])

if __name__ == '__main__':
    http_server = tornado.httpserver.HTTPServer(application, ssl_options={
        "certfile": "/var/pyTest/keys/ca.csr",
        "keyfile": "/var/pyTest/keys/ca.key",
    })
    http_server.listen(443)
    tornado.ioloop.IOLoop.instance().start()

@63ek,你确定你的证书文件是正确的吗?我已经测试了这段代码,但是证书文件应该是以“.pem”为扩展名的。 - falsetru
10
Tornado 2.x及以上版本在Application中提供了一种方便的方法,可以为您创建HTTPServer实例,因此您可以只说application.listen(443,ssl_options=等)。甚至可以通过在启动IOLoop之前放置两个调用application.listen来使相同应用程序同时在两个端口(80 443)上监听,但是如果您想要根据请求使用的端口有所不同,则需要为每个端口创建不同的应用程序。 - Silas S. Brown
1
@SilasS.Brown,感谢您提供的信息。是否可以单独发布一个回答呢?在此处进行评论只会通知我(不会通知OP,除非您明确提到OP的用户名)。发布回答将使更多人受益。 - falsetru
1
谢谢,这个问题是4年前提出的,所以我认为OP已经过去了;只是想添加一条注释,以防其他人通过搜索找到这个问题,我的评论对你的答案只是一个小改变,所以我认为没有必要创建一个“竞争性”的答案,人们可以看到你的答案和那个评论。 - Silas S. Brown
@SilasS.Brown,我很想尝试application.listen(443,ssl_options=等)。但这个方法不起作用。请提供一些好的参考资料,谢谢。 - Ravi Anand
1
@RaviAnand 在Web Adjuster中对我有效。如果它对你不起作用,也许可以发布一个新的“为什么这段代码不起作用”的问题,并展示你的代码? - Silas S. Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接