Caddy 虽好,但是要让它使用 Cloudflare API 处理 DNS 验证,还非得重新编译一次。而且,词元发现 Caddy 直到目前都没有充足的第三方文档(尽管其官方文档很好),对于一些特殊需求到底该怎么写配置还是不甚清楚。因此,词元决定换用另一个可以自动续期的 SSL 申请工具,综合一下 Caddy 的功能和 NGiNX 的性能和资料优势。
很明显,这个工具就是 acme.sh。
😁 这个长得很像网址的名称确实是一个网址,直接重定向到 GitHub 仓库。
📦 安装
为了不要污染用来日常操作的账号,也防止 sudo
权限被滥用,我们新建一个普通用户:
|
|
🤖 Certbot:你礼貌吗?
然后,使用 acme.sh 的安装脚本安装。注意这里不需要 Root 权限,安装位置也在主目录下:
|
|
目前 acme.sh 已默认从 Let’s Encrypt 转为使用 ZeroSSL,后者需要邮箱地址进行注册,所以如果您打算使用默认设置,您需要添加 email=you@example.com
这一部分。如果您打算使用 Let’s Encrypt,可以忽略这个设置。
🏅 申请证书
首先要激活一下在 .bashrc
中添加的 $PATH
位置:
|
|
如果您打算使用 Let’s Encrypt,请执行:
|
|
如果您设置了邮箱,打算就用 ZeroSSL,就不必执行。
本文假设您使用 Cloudflare 托管了您的域名,并且您打算申请泛域名证书,也即这张证书可以应用于 *.yourdomain.tld
的域名。
首先访问 Token 管理页面,创建一个 Token,如下:
注意,这里词元选择了一个特定域名的 DNS 修改权限,如果您打算申请很多域名,既可以选择创建不同的 Token,也可以选择“All zones”,允许全局修改。这个 Token 只会显示一次,如果您需要反复使用,请记录下来。
完成之后,来到域名的 Dashboard,找到右下角的 Account ID 和 Zone ID,用于识别您的 Zone。
记下这三个字符串之后,回到 SSH,将它们存入环境变量:
|
|
然后,执行 acme.sh 获取证书:
|
|
除非您的站点需要兼容非常古老的设备和浏览器,没有理由不适用 EC-256——与 RSA 相比,EC-256 有更短的证书、更快的加密和解密速度、相似的安全性。您当然可以删除 -k ec-256
继续使用传统的 RSA 加密。
🔨 使用证书
acme.sh 不建议您直接使用位于主目录中的证书。您应当创建一个 certbot
有写入权限的全局位置目录,例如 /var/cert/yourdomain.tld
并使用 acme.sh 自动将证书同步到那儿。这也是要单独创建一个用户的原因之一:这样,您的账户就不会具有写入那个目录的权限,避免误操作删除,或者被其他程序随便访问。
使用以下命令,复制到您指定的目录:
|
|
acme.sh 使用 crontab 自动更新证书。如果您创建的账户有恰当的权限,当然可以添加 --reloadcmd "systemctl restart nginx"
之类的自动重启服务。
然后,您就可以在服务器里配置证书。由于您通过 acme.sh 设置了证书位置,就不需要一直更改证书文件名了。
🎆 下课
还是很简单的对吧。再见 Caddy!