使用acme.sh工具申请let's encrypt的泛域名证书

本文主要介绍如何使用acme.sh工具来申请let’s encrypt的泛域名证书。

1、安装acme.sh

安装acme.sh之前我们需要先安装必要的工具和依赖

1
yum install socat curl -y

接着我们安装acme.sh,过程比较简单,只需要执行下列操作即可自动安装。对于安装的用户,官方声称可以使用root用户或者普通用户,这里我们使用root用户进行操作。

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

安装的过程比较简单,会在目录下创建一个隐藏目录,所有的相关文件都会存放在这里,同时还会创建一个crontab来定时执行任务检测证书。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@aliyun /root]# pwd
/root
[root@aliyun /root]# curl https://get.acme.sh | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 775 0 775 0 0 963 0 --:--:-- --:--:-- --:--:-- 962
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 201k 100 201k 0 0 47150 0 0:00:04 0:00:04 --:--:-- 47156
[Fri Nov 27 09:50:57 CST 2020] Installing from online archive.
[Fri Nov 27 09:50:57 CST 2020] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Fri Nov 27 09:51:00 CST 2020] Extracting master.tar.gz
[Fri Nov 27 09:51:00 CST 2020] Installing to /root/.acme.sh
[Fri Nov 27 09:51:00 CST 2020] Installed to /root/.acme.sh/acme.sh
[Fri Nov 27 09:51:00 CST 2020] Installing alias to '/root/.bashrc'
[Fri Nov 27 09:51:00 CST 2020] OK, Close and reopen your terminal to start using acme.sh
[Fri Nov 27 09:51:00 CST 2020] Installing alias to '/root/.cshrc'
[Fri Nov 27 09:51:00 CST 2020] Installing alias to '/root/.tcshrc'
[Fri Nov 27 09:51:00 CST 2020] Installing cron job
21 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
[Fri Nov 27 09:51:00 CST 2020] Good, bash is found, so change the shebang to use bash as preferred.
[Fri Nov 27 09:51:01 CST 2020] OK
[Fri Nov 27 09:51:01 CST 2020] Install success!
[root@aliyun /root]# crontab -l
21 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
[root@aliyun /root]# ll -A | grep acme
drwx------ 5 root root 4.0K Nov 27 09:51 .acme.sh

2、配置阿里云DNS解析

由于泛域名证书申请的时候需要使用DNS解析作为认证,为了保证自动申请证书成功,我们需要申请一个Access_Key来进行操作,这里以阿里云为例

1
2
[root@aliyun /root/.acme.sh/dnsapi]# pwd dns_ali.sh
/root/.acme.sh/dnsapi

在里面找到Ali_KeyAli_Secret两个字段,将申请到的阿里云access_key填入里面,注意在阿里云中创建了子用户之后,需要授予对应的权限才能对DNS解析进行操作

image-20201127101024377

3、生成证书

我们以阿里云DNS申请泛域名证书为例,执行下列命令则可以生成对应的证书

1
./acme.sh --issue --dns dns_ali -d tinychen.com -d *.tinychen.com

对于ecc证书,我们只需要在后面加上--keylength ec-256

1
./acme.sh --issue --dns dns_ali -d tinychen.com -d *.tinychen.com --keylength ec-256

对于生成的证书,证书链和公钥是分开的,在nginx中,为了保证证书的完整性,我们一般使用带有证书链的公钥,也就是对应这里生成的fullchain.cer文件就包含了公钥和证书链,我们可以直接使用。