使用Letsencrypt免费证书搭建tornado的https服务

使用Letsencrypt免费证书搭建tornado的https服务

letsencrypt是个非盈利组织,他们搞出来一整套自动授权ssl免费证书体系,方便了很多中小用户。这里笔者参照官方网站一步步完成:https://certbot.eff.org/。certbot是letsencrypt团队研发的自动化更新ssl证书的工具

笔者的服务器是centos7+tornado自己搭建的,因此需要手动DIY一小部分操作,如果你的服务器是nginx/apache之类的,certbot直接提供了自动化功能。

确保使用root权限进行如下操作:

1 按certbot官网说明,先安装snapd,这玩意儿用来做软件包管理器了. https://snapcraft.io/docs/installing-snap-on-centos

yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap

2 安装certbot

snap install core
snap refresh core
yum remove certbot
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
# 如果可以停止服务器
certbot certonly --standalone
# 如果不能停止服务器
certbot certonly --webroot

此时,certbot从远程服务器生成并下载证书到你的服务器,并给你生成Cert和Key:

/etc/letsencrypt/live/[HOST]/fullchain.pem
/etc/letsencrypt/live/[HOST]/privkey.pem

letsencrypt证书有效期为90天,certbot会在证书过期前自动更新,这样在更新前,我们需要停止服务器,再更新后再启动服务器。certbot专门为这种需求提供了hook功能,即用户只需要写启动关闭自己服务器的功能脚本(/etc/letsencrypt/renewal-hooks/pre和/etc/letsencrypt/renewal-hooks/post),即可实现在certbot更新域名前自动停止服务器,在更新域名后自动启动服务器。(certbot更新证书过程需要占用本地80端口,所以要先关掉服务,而证书文件的更新,也必然需要重启https服务)

在tonado中,相应的开发代码:

https_server = tornado.httpserver.HTTPServer(application, decompress_request=True, ssl_options={
        "certfile": "/etc/letsencrypt/live/域名/fullchain.pem",
        "keyfile": "/etc/letsencrypt/live/域名/privkey.pem",
    })
https_server.listen(443)