现代的浏览器开始有将 https 访问作为默认访问方式的倾向,因此需要将网站配置为https 访问。
Let’s Encrypt 组织提供免费的 TLS 加密证书,用于协助web服务器实现https协议。而 acme.sh 脚本便是可以实现从 Let’s Encrypt 自动化申请、续期 TLS 证书的强力工具。
原文链接: http://blog.ryjer.com/posts/a1993e0126.html
Debian 10、OMV 5、CentOS、RHEL、Rocky和 SUSE 等服务器linux 发行版都适用。
1、目的
使用 acme.sh 脚本为 web服务器(Nginx)申请 ECC TLS 证书,实现网站的 https 加密访问。
2、过程
参考文档
1. 安装 acme.sh
安装很简单, 一个命令。注意更改最后的my@example.com
为你自己的邮箱
1 | curl https://get.acme.sh | sh -s email=my@example.com |
官网的文档上说会自动创建一个 alias,但我这里没有效果。所以手动创建一个,方便接下来的命令使用
1 | alias acme.sh=~/.acme.sh/acme.sh |
安装过程也会同时创建一个 cron 定时任务
,可以使用 crontab -l
命令查看,会多出来如下的一行
1 | 32 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null |
这表示在每天 0:32 执行一次
2021-08-07 更新
acme.sh 官方宣布将在 2021-08-01 后将默认CA 证书申请机构从 Let’s Encrypt 转变为 ZeroSSL(估计是被收购了)。详情见 Change default CA to ZeroSSL · acmesh-official/acme.sh Wiki (github.com)
ZeroSSL 也可以申请免费的 90天证书并自动续期,但是需要注册 ZeroSSL 的账号后才能使用。但是公告中提供了继续保持原有 CA 机构为 Let’s Encrypt 的方法,使用以下命令将默认CA (证书颁发机构)改为 Let’s Encrypt,且 acme 自动升级后仍将保存该默认设置
1 | acme.sh --set-default-ca --server letsencrypt |
如果你想改用 ZeroSSL的话,请参考这篇官方文档: ZeroSSL.com CA · acmesh-official/acme.sh Wiki (github.com)
2. 开启自动升级
如果你不想手动升级, 可以开启自动升级,这样以后就不用再管了
1 | acme.sh --upgrade --auto-upgrade |
你也可以随时关闭自动更新
1 | acme.sh --upgrade --auto-upgrade 0 |
3. 生成证书
家用宽带是没有80端口的,所以选择使用 DNS服务商(我是阿里) 提供的 API 进行自动添加记录验证的方式申请。
其他的DNS服务商可以参考这个页面 github acme.sh 官方dnsapi 参考文档
1 | export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" |
然后,就可以使用以下命令申请域名了。这里假定域名是 domain.com
。这里第二个 -d 参数为 *.domain.com
,表示申请一个泛域名证书。默认会申请 RSA算法 证书,我这里用 -k ec-384
参数改为申请 384位 的 ECC算法 证书。
1 | acme.sh --issue --dns dns_ali -d domain.com -d *.domain.com -k ec-384 |
4. copy/安装 证书
生成的证书会存放在当前用户的 ~/.acme.sh
文件夹内。由于acme.sh 脚本会不断更新,该文件夹内的布局也会不断改变。显然直接从该文件夹内拷贝证书出来是一种很不可靠的行为,因为你无法确定下一次证书所在的具体路径。
因此,acme.sh专门提供了复制/安装证书的方法,并且不建议用户直接去 ~/.acme.sh 文件夹内复制证书使用。
根据不同的web服务器,有不同的命令。最为常见的服务器是 Apache httpd
和 Nginx
,我这里使用的是 Nginx,由于是ECC证书,需要额外的 --ecc
参数
Nginx example:
1 | acme.sh --install-cert -d domain.com --ecc \ |
5. 更新证书
目前证书在 60 天以后会自动更新,你无需任何操作。今后有可能会缩短这个时间,不过都是自动的,你不用关心。
当然,你也可以手动更新ECC证书
1 | acme.sh --renew -d domain.com --force --ecc |
如果不是ECC证书的话,不需要--ecc
参数
1 | acme.sh --renew -d domain.com --force |
这些配置完后,就不用再管了,可以忘掉这些事了。
提示:acme.sh 官方对申请证书的频率有限制,子域名好像每周最多4次。所以不要频繁乱申请!
6. 吊销证书
如果运气不好,证书文件泄露了。你需要吊销当前的ECC证书,对应命令为
1 | acme.sh --revoke -d domain.com --ecc |
不是ECC证书则不需要 --ecc
参数
1 | acme.sh --revoke -d domain.com |