Rocky(Centos)使用acme.sh申请安装Let‘s Encrypt泛域名ECC证书(阿里DNS)

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

安装很简单, 一个命令。注意更改最后的[email protected]为你自己的邮箱

curl  https://get.acme.sh | sh -s email=[email protected]

官网的文档上说会自动创建一个 alias,但我这里没有效果。所以手动创建一个,运行以下命令:

alias acme.sh=~/.acme.sh/acme.sh

安装过程也会同时创建一个 cron 定时任务,可以使用 crontab -l 命令查看,会多出来如下的一行(通常分钟数是随机的)

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 自动升级后仍将保存该默认设置

acme.sh --set-default-ca  --server  letsencrypt

如果你想改用 ZeroSSL的话,请参考这篇官方文档: ZeroSSL.com CA · acmesh-official/acme.sh Wiki (github.com)

注意,这需要你去注册一个 ZeroSSL 的账户,注册使用是免费的


2. 开启自动升级

如果你不想手动升级, 可以开启自动升级,这样以后就不用再管了

acme.sh  --upgrade  --auto-upgrade

你也可以随时关闭自动更新

acme.sh --upgrade  --auto-upgrade  0

3. 生成证书

家用宽带是没有80端口的,所以选择使用 DNS服务商(我是阿里) 提供的 API 进行自动添加记录验证的方式申请。

其他的DNS服务商可以参考这个页面 github acme.sh 官方dnsapi 参考文档

下面的是阿里云DNS的环境变量,值是我胡乱打的,注意改为你的值

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

然后,就可以使用以下命令申请域名了。这里假定域名是 domain.com 。这里第二个 -d 参数为 *.domain.com,表示申请一个泛域名证书(没错,这两个域名只会生成一个证书)。默认会申请 RSA算法 证书,我这里用 -k ec-384 参数改为申请 384位ECC算法 证书。

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:

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证书

acme.sh --renew -d domain.com --force --ecc

如果不是ECC证书的话,不需要--ecc参数

acme.sh --renew -d domain.com --force

这些配置完后,就不用再管了,可以忘掉这些事了。

提示:acme.sh 官方对申请证书的频率有限制,子域名好像每周最多4次。所以不要频繁乱申请!

6. 吊销证书

如果运气不好,证书文件泄露了。你需要吊销当前的ECC证书,对应命令为

acme.sh --revoke -d domain.com --ecc

不是ECC证书则不需要 --ecc参数

acme.sh --revoke -d domain.com

你可能感兴趣的:(Linux学习,网站,安全,tls,https,centos,ecc,ca证书)