使用Tornado搭建HTTPS网站

使用Python tornado搭建HTTPS网站

  • 安装openssl
  • 生成SSL证书
    • 生成服务器端的私钥(key文件)
    • 生成CSR文件
    • 对客户端也作同样的命令生成key及csr文件
    • CA的签名
    • 用生成的CA的证书为刚才生成的server.csr,client.csr文件签名
    • 应对Enter PEM pass phrase的提示
  • 在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()

参考

  • http://www.yeolar.com/note/2015/04/30/tornado-ssl-https/
  • https://www.cnblogs.com/zhouxihi/p/6001866.html

你可能感兴趣的:(Python,https,ssl,openssl,python)