Featured image of post acme.sh申请安装Let's-Encrypt免费泛域名ECC证书(阿里DNS)

acme.sh申请安装Let's-Encrypt免费泛域名ECC证书(阿里DNS)

现代的浏览器开始有将 https 访问作为默认访问方式的倾向,因此需要将网站配置为https 访问。Let's Encrypt 组织提供免费的 TLS 加密证书,用于协助web服务器实现https协议。而 acme.sh 脚本便是可以实现从 Let's Encrypt 自动化申请、续期 TLS 证书的强力工具。

 · 阅读量: 

现代的浏览器开始有将 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 过程

参考文档

github acme.sh官方文档

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
2
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

然后,就可以使用以下命令申请域名了。这里假定域名是 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 httpdNginx,我这里使用的是 Nginx,由于是ECC证书,需要额外的 --ecc 参数

Nginx example:

1
2
3
4
acme.sh --install-cert -d domain.com --ecc \
--key-file       /etc/nginx/ssl/domain.com/domain.com.key  \
--fullchain-file /etc/nginx/ssl/domain.com/fullchain.cer \
--reloadcmd     "service nginx force-reload"

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