首先要安装 certbot。
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
如果想要自动化,还要到百度智能云生成密钥,准备./baidu-bce.yaml
,内容如下。
access_key: ***
secret_key: ***
使用 certbot 从 Let's Encrypt 申请证书。
调用 certbot 申请证书。
# 必须以主域名开头
$ sudo just get-cert "haobit.top,*.haobit.top,*.app.haobit.top"
$ sudo just get-cert "capchdo.com,capchdo.cn,*.capchdo.com,*.capchdo.cn"
现在justfile
中配置了certbot-hooks/*.sh
,应当可以自动验证。
若未配置,需要按照提示到“智能云解析 - 百度智能云控制台”添加 TXT 记录解析,到服务器上的/path/to/acme-challenge
设置 HTTP 验证。
[!NOTE]
一般来说,如果参数没有改变,只需要设置一次 TXT 记录,无需每次申请时修改;不过 Let's Encrypt 似乎不是这样。
查看证书名、域名、有效期等。
$ sudo just show-cert
用baidu-bce
上传到百度智能云,从而部署。
[!NOTE]
在自己服务器(源站)上部署有效证书是不必须的;即使部署了,因为有CDN,用户获取到的证书也不是源站上部署的证书。但是,仍然建议在源站上部署有效证书或CDN供应商提供的证书,并开启CDN的有效证书验证,以保护源站与CDN服务器间的通信。需要注意的是,百度智能云似乎不支持验证源站证书。
下载可执行文件baidu-bce
(Linux)或baidu-bce.exe
(Windows),放到任意位置并给予合适权限即可。
之前申请到的/path/to/certificate/{fullchain,privkey}.pem
certbot 申请得到的证书。
前述./baidu-bce.yaml
百度智能云的access_key
和secret_key
。
$ sudo ./baidu-bce upload haobit.top /etc/letsencrypt/live/haobit.top/
安装 certbot 时已经设置了 cron job 或 systemd timer 自动更新。(之后不用再运行 certbot)
最近设置了 manual hooks,但还未完整测试过,未必能用。
[!CAUTION]
只是理论上如此,其实从未被验证过。
# 验证自动更新流程
$ sudo just certbot renew --dry-run
# 检查定时任务
$ systemctl list-timers
# 会有一项 snap.certbot.renew.timer。
# 查看任务状态
$ systemctl status snap.certbot.renew.timer
如果自动更新失败,可以直接当成新增证书重来。
需要手动设置 cron job。
$ sudo crontab -e -u root
按提示编辑,command 一列如下。
…/baidu-bce upload … 2>&1 | logger -t cert
以后可从日志检查上传情况,如下。
$ sudo journalctl --system -t cert
似乎读写日志等文件需要sudo
。
Cloudflare提供免费的CDN、免费的SSL证书,且支持源站有效证书验证。它易于配置和使用。但是在大陆地区访问速度感人。