缘由
最近网站证书到期了,由于以前一直使用的是 来此加密,但是不知道最近是由于加入了会员系统还是使用的用户多了,总之就是申请证书的速度变得非常非常慢,并且还得去服务商那里更改 DNS 的记录,每次都要这样折腾一番,太麻烦了,于是就去找了找,发现了这个脚本:acme.sh,十分好用,并且申请的速度十分快,而且支持泛域名,于是特此记录一下。
安装并配置
INFO
事先说明,我这里使用的是 Windows 系统,不过按照官方文档来说,使用 Linux 会更简单
拉取仓库
拉取仓库前,请确保你已经正确的安装了 Git 以及 curl,可以通过以下命令验证安装:
git -v
curl --V
然后执行以下命令拉取仓库:
git clone https://github.com/acmesh-official/acme.sh.git
拉取过程可能会因为网络问题出错,可以多试几次。
拉取成功之后,进入仓库目录:
cd acme.sh
然后执行以下命令安装:
WARNING
这里需要注意,如果你使用的是 Windows
系统,那么你需要使用 Git Bash
来执行命令,而不是 Cmd
或 PowerShell
./acme.sh --install
出现 OK
之后,即代表安装完成( 安装过程可能会出现一些错误,一般情况下,忽略即可 )
签发证书
准备步骤完成后,就可以开始签发证书了。
配置环境变量
使用 acme.sh
的很大一个原因是因为它支持使用大多数服务商的 API
接口来实现自动添加 txt
记录完成验证。
我这里使用的是腾讯云的 DNSPod
,并且文档中还说明了,acme.sh
目前还支持 cloudflare
, cloudxns
, godaddy
以及 ovh
等数十种解析商的自动集成。
这里我们只需要去 DNSPod
的 控制台 中申请一个 DNSPod Token
。
获取到 Token
之后,就可以在 acme.sh
的配置文件中配置了:
export DP_Id="你的 DNSPod 用户 ID"
export DP_Key="你的 DNSPod API Token"
更多 API 用法可以去查看 官方文档,此处不再赘述。
获取证书
到了最简单的一步,直接使用一行命令即可获得证书:
请将 yourdomain.com 替换成你要添加的域名
./acme.sh --issue --dns dns_dp -d "yourdomain.com" -d "*.yourdomain.com"
来详细说明一下这个命令干了什么:
- --issue 是告诉 acme.sh 你想要发行(也就是获取)一个新的证书。
- --dns dns_dp 表示你想要使用 DNS 的方式来验证域名所有权,并且指定了使用 DNSPod 提供的 DNS API。
- -d yourdomain.com 表示你想要为该域名获取证书。
- -d *.yourdomain.com 表示你还想要为该域名的所有子域名(泛域名)获取证书。
以上步骤全部完成后,acme.sh
就会输出你的证书的存放位置,比如:
通常情况下,fullchain.cer
文件用作证书文件,而 yourdomain.com.key
文件用作私钥文件。
生成 RSA 算法证书
这算是一个可选项,主要是我在将证书的私钥文件填入又拍云时,出现了错误信息,而后得知又拍云不支持 ECC
算法的私钥。
于是需要更改一下上面的生成命令,默认情况下,acme.sh
会生成使用 ECC
密钥的证书,你可以通过指定 --keylength
选项来设定密钥长度,让其生成 RSA
算法的证书,例如使用 2048
位或 4096
位:
./acme.sh --issue --dns dns_dp -d "yourdomain.com" -d "*.yourdomain.com" --keylength 2048