使用 Let's Encrypt 配置 HTTPS

HTTPS是一种更安全的访问网页的方式。简单介绍一下使用Let’s Encrypt来配置HTTPS。

Let’s Encrypt 介绍

HTTPS中关键的是其中的证书。证书的一个重要的前提,是需要通过国际公认的证书证书认证机构(简称CA,Certificate Authority)申请。当然可以自己生成证书而不通过CA(自己充当CA),但是这样生成的证书无法在其他人的浏览器中正常通过,会提示证书不可信。于是当前的目标便是找到一个获得免费证书的方式。而Let’s Encrypt就能提供这样的免费证书。
Let’s Encrypt[^1]是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书[^2]。

部署 Let’s Encrypt 的证书

官方推荐使用一个叫做 Certbot 的工具来自动化部署。访问Certbot的官方页面,选择对应的服务器应用和系统后,根据提示安装。此处选择了在CentOS 7的Nginx上安装,页面提示的操作是:

1
2
3
# 终端中运行
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

而后在终端中执行:

1
2
3
4
# 如果你的服务器正在对外提供服务,当前不能重启的话,执行如下命令:
sudo ./path/to/certbot-auto --authenticator webroot --installer nginx
# 如果可以重启:
sudo ./path/to/certbot-auto --authenticator standalone --installer nginx --pre-hook "nginx -s stop" --post-hook "nginx"

中间过程中可以选择是否开启HTTP访问的自动跳转。如果开启后,用户访问HTTP的域名时,服务器会自动重定向到 HTTPS。建议开启。
一切执行完之后,证书已经正确部署了。可以尝试访问HTTPS的域名看看。

更新证书

Let’s Encrypt的证书虽然免费,不过也有一个小小的弊端:证书需要3个月(90天)重新更新一下。同样的,这个动作可以使用Certbot来操作。同时还可以通过crontab来定时自动调用Certbot,完成自动更新:

1
2
3
4
5
6
# 更新方式
sudo ./path/to/certbot-auto renew
# 自动更新的实现需要使用 crontab。编辑 crontab 配置
sudo vim /etc/crontab
# 新增配置 1月一次调用
0 0 1 * * root /usr/bin/certbot renew >/dev/null 2>&1

[^1]: Let’s Encrypt 官方 about 页面 https://letsencrypt.org/about/
[^2]: 来自 Wikipedia Let’s Encrypt 词条 https://zh.wikipedia.org/wiki/Let%27s_Encrypt