前言

之前使用阿里云提供的免费 SSL 证书,但是不能免费使用通配符证书。为了方便添加二级域名,申请了支持免费通配符证书的 Let's Encrypt 证书。这里记录一下为在阿里云购买的域名申请 Let's Encrypt 通配符证书过程。

ACME 项目
ACME 客户端

安装 acme.sh

使用 acme.sh 可以从 Let's Encrypt 生成免费的证书,安装:

curl  https://get.acme.sh | sh

安装完成后,acme.sh~/.acme.sh/路径下。
同时会创建 一个 bash 的 alias, 方便使用 acme.sh。
如果无法直接执行 acme.sh,执行以下命令手动改创建 alias:

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

创建 AccessKey

进入阿里云控制台,鼠标移至右上角头像处会出现菜单,点击AccessKey 管理然后根据提示创建 AccessKey.
不同 DNS 服务商对此定义不同,阿里云叫 AccessKey,包含对 DNS 操作的 API 权限;有的叫 DNS API,根据实际情况操作.

证书申请

不同 DNS 服务商,以下操作使用的命令不同,详见 ACMESH API 官方文档
首先导入 API ID 和 API KEY,导入的 API ID 和 API KEY 会被自动记录,以后使用相同域名时不用再次导入.

export Ali_Key="12345"
export Ali_Secret="12345"

然后申请证书:

acme.sh --issue --dns dns_ali --dnssleep 900 -d *.example.com

参数--dnssleep代表等待多少秒后验证 DNS 记录,需要根据 DNS 的 TTL 来设置.

证书安装

默认生成的证书都放~/.acme.sh/目录下,需要使用 --installcert 命令进行安装.

--installcert 命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd 会被自动调用,让服务器生效.

指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.

CenOS 7 下安装示例:

apache 下

acme.sh --installcert -d *.example.com \
--cert-file      /path/to/certfile/in/apache/*.example.com.cer  \
--key-file       /path/to/keyfile/in/apache/*.example.com.key  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.cer \
--reloadcmd     "service httpd force-reload"

nginx 下

acme.sh --installcert -d *.example.com \
--key-file       /path/to/keyfile/in/nginx/*.example.com.key  \
--fullchain-file /path/to/fullchain/nginx/fullchain.cer\
--reloadcmd     "service nginx force-reload"

更新

证书更新

安装了 ACME 后,它会自动创建 cronjob,每天都会自动检测所有的证书,如果快过期了,需要更新,则会自动更新证书.

acme.sh 更新

升级 acme.sh 到最新版:

acme.sh --upgrade

开启自动更新:

acme.sh  --upgrade  --auto-upgrade

关闭自动更新:

acme.sh --upgrade  --auto-upgrade  0
Last modification:November 20th, 2020 at 11:31 am