之前都是使用腾讯云和阿里云的免费证书,但是到期重新弄还是很麻烦,所以使用 Let’s Encrypt 来部署并开启自动续签
之前都是使用腾讯云和阿里云的免费证书,一次一年的期限,虽然弄起来很方便,但是网站有点多,到期都要重新弄有点麻烦,就考虑使用 Let’s Encrypt 来部署,虽然每次签只有 90 天的有效期,但可以通过自动续签来解决每次需要手动部署的麻烦。
安装Certbot
利用 Cerbot
这个工具来获取证书,并定期更新证书。Certbot
是一款功能全面并且容易使用的工具,可自动完成获取和更新 Let’s Encrypt SSL证书。Certbot
已经在 Ubuntu20.04
的软件库里,所以我们可以直接运行以下命令进行安装:
|
|
获取Let’s Encrypt SSL 证书
获取自签 SSL 证书,使用 Cerbot
及插件 webroots
来获取 SSL 证书文件:
|
|
这个命令会为 example.com
和 www.example.com
这两个域名生成一个证书,使用 --webroot
模式会在 /var/www/example
中创建 .well-known
文件夹,这个文件夹里面包含了一些验证文件,certbot
会通过访问 example.com/.well-known/acme-challenge
来验证你的域名是否绑定的这个服务器,这个命令在大多数情况下都可以满足需求。
但是有些时候我们的一些服务并没有根目录,例如一些微服务,这时候使用 --webroot
就走不通了。certbot
还有另外一种模式 --standalone
, 这种模式不需要指定网站根目录,他会自动启用服务器的 443 端口,来验证域名的归属。我们有其他服务(例如 nginx
)占用了 443 端口,就必须先停止这些服务,在证书生成完毕后,再启用。
|
|
执行完成就拥有域名的SSL证书了,存放在 /etc/letsencrypt/live/
里面。接下来编辑我们域名的Nginx配置文件,示例如下:
|
|
完成后打开浏览,以https://
访问你的域名,如果地址栏的加密锁完好不报错,证明你已成功部署。你也可以通过SSL证书测试网站来验证。
自动更新 SSL 证书
配置完成后,我们还需要配置自动更新这些证书,因为 Let’s Encrypt 提供的证书只有90天的有效期。使用 certbot renew
来自动检查系统内的证书,并且自动更新这些证书。 我们可以运行这个命令测试一下
|
|
如果运行报错
|
|
这是因为 api.example.com
生成证书的时候使用的是 --standalone
模式,验证域名的时候,需要启用443端口,这个错误的意思就是要启用的端口已经被占用了。 这时候我必须把nginx先关掉,才可以成功。所以需要先运行 service nginx stop
运行这个命令。
接下来通过 cron
来自动更新证书。 sudo vim /etc/cron.d/certbot
新建一个文件 certbot, 这个是一个 cron 计划,内容如下:
|
|
这段内容的意思就是 每隔 两个月的 凌晨 2:15 执行 更新操作。--pre-hook
这个参数表示执行更新操作之前要做的事情,因为我有 --standalone
模式的证书,所以需要停止 nginx
服务,解除端口占用。 --post-hook
这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx
服务的启用
最后我们用 crontab 来启动这个定时任务:
|
|