Published on

acme.sh安装证书

Authors
  • avatar
    Name
    gulu
    Twitter

acme.sh支持多个CA机构的免费证书,一般这种免费证书有效期只有三个月,可以通过acme.sh自动续签,从而实现长期证书的目的。

目前 acme.sh 支持 5 个正式环境 CA,分别是 Let's EncryptBuypassZeroSSLSSL.com 和 Google Public CA,默认使用 ZeroSSL。

1、安装acme.sh

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

acme.sh默认安装路径

~/.acme.sh/

设置别名:

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

2、生成证书

acme.sh已经被ZeroSSL收购了,所以默认的证书申请服务商为ZeroSSL,你也可以替换为你想要的CA证书签发机构,如Let’s Encrypt Google等

常见CA的对比列表如下:

CA机构最长有效期ECC证书域名数目通配符证书NotAfter
Let’s Encrypt90Yes100YesNo
ZeroSSL90Yes100YesYes
Google90Yes100YesYes
Buypass180Yes5付费No
SSL.com90Yes2付费No
acme.sh可以通过http验证和DNS验证,本次主要使用DNS验证,通过域名解析商 DNS API自动添加域名解析完成验证。
目前acme.sh支持cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成。

自动dns验证证书

下面以CF为例,描述下验证流程。 登录CF后,点击目标域名进行管理页面,右下角可以看到

这里可以拿到三个参数,分别是区域ID、账户ID、API令牌(下面说如何获取) 先保存前面两个参数,点击获取API令牌,进入创建令牌页面。

点击创建令牌

创建区域DNS

点击确认,获取到API Token

最后,在服务器终端执行

export CF_Token="复制下来的 API Token"
export CF_Account_ID="复制下来的 Account ID"
export CF_Zone_ID="复制下来的 Zone ID"

使用acme.sh的DNS API模式申请证书

acme.sh --issue --dns dns_cf -d example.com -d *.example.com

证书申请会持续几分钟,耐心等待。执行成功后,相关证书会生成在 .acme.sh 目录下。

3、copy证书

.acme.sh 目录下的证书不要动,我们将生成的证书copy到nginx下。

acme.sh --install-cert -d example.com \
--key-file       /etc/nginx/ssl/example.com.key  \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--ca-file        /etc/nginx/ssl/example.com.ca.crt \
--reloadcmd     "systemctl restart nginx"

4、查看已安装证书的信息

acme.sh --info -d example.com

5、更新证书

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心. 执行完上面的证书安装过程后,如果cronjob正确安装的话,会自动生成一个自动更新证书的任务,使用命令查看。

cronjob -l

存在任务的话等待证书自动更新即可。

参考