介绍

  • 一个用 Shell(Unix shell)语言编写的 ACME 协议客户端
  • 完整的 ACME 协议实现
  • 支持 ECDSA 证书
  • 支持 SAN 和通配符证书
  • 简单、强大、非常容易使用,你只需要3分钟就能学会它。
  • 兼容bash、dash和sh
  • 完全使用 Shell 编写,不依赖 python
  • 只需一个脚本就能自动签发、更新和安装你的证书
  • 不需要 root 权限
  • 支持 Docker
  • 支持 IPv6
  • 支持设置定时任务更新通知结果

部署

本篇默认使用 ZeroSSL 进行部署,如需使用其他服务商请更换相关配置

安装 acme.sh

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

定义临时变量

DNSPod 为例子,下面的内容根据所使用的 DNS 服务商更改,其他可支持地址请查看 https://github.com/acmesh-official/acme.sh/wiki/dnsapi
或者根据上方链接直接添加入 account.conf 文件

1
2
export DP_Id="your ID"
export DP_Key="your Token"

设置 CA

默认服务商为 ZeroSSL,如需更换为 Let’s Encrypt 请输入以下命令

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

注册 ZeroSSL 账号

官网地址:https://zerossl.com
注册完成后点击进入 Dashboard,选择 Developer 标签,生成 EAB 记录下来并替换至以下命令中(EAB可无限生成且无法删除)

1
2
3
acme.sh --register-account --server zerossl \
--eab-kid xxxxxxxxxxxx \
--eab-hmac-key xxxxxxxxx

签发证书

  • --dns 指定 DNS 服务商,dns_dp 代表 DNSPod,其他可支持选项请查看 https://github.com/acmesh-official/acme.sh/wiki/dnsapi
  • -d *.example.com 表示签发通配符 (zsh需要使用反斜杠进行转义,如:\*.example.com
  • --keylength ec-256 表示签发 ECC 证书,不添加则签发 RSA 证书,可选参数还有 ec-384ec-521
  1. ec-256 (prime256v1, “ECDSA P-256”)
  2. ec-384 (secp384r1, “ECDSA P-384”)
  3. ec-521 (secp521r1, “ECDSA P-521”, Let’s Encrypt 尚不支持此功能。
1
2
3
4
acme.sh --issue \
--dns dns_dp \
-d example.com -d *.example.com \
--keylength ec-256

安装证书

Apache example

1
2
3
4
5
acme.sh --install-cert -d example.com --ecc \
--cert-file /path/to/certfile/in/apache/cert \
--key-file /path/to/keyfile/in/apache/key \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"

Nginx example

1
2
3
4
acme.sh --install-cert -d example.com  --ecc \
--key-file /path/to/keyfile/in/nginx/key \
--fullchain-file /path/to/fullchain/nginx/cert \
--reloadcmd "nginx -s reload"
  • --ecc 表示安装 ECC 证书
  • --cert-file 表示证书安装目录及文件名
  • --key-file 表示私钥安装位置以及文件名
  • --fullchain-file 表示证书安装目录及文件名(此处为完整证书链)
  • --reloadcmd 重载服务将证书加载

续订证书

无需手动续订,部署完成后自动添加定时任务检查证书有效期并进行更新

手动执行续期任务

1
acme.sh --cron --home "/root/.acme.sh"

强制续订证书

1
acme.sh --renew -d example.com --force

强制续订ECC 证书

1
acme.sh --renew -d example.com --force --ecc

停止续订证书

1
acme.sh --remove -d example.com [--ecc]

吊销证书

1
acme.sh --revoke -d example.com [--ecc]

更新 acme.sh

更新 acme.sh 到最新版

1
acme.sh --upgrade

开启自动更新

1
acme.sh  --upgrade  --auto-upgrade

关闭自动更新

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

设置通知

请使用 --set-notify 配置发送测试通知,并自动更新account.conf 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

--notify-level 0|1|2|3 设置通知级别,默认值为2

0: 禁用,将不发送通知
1: 只有在出现错误时才发送通知
2: 当有证书被成功更新或出现错误时,发送通知
3: 每次运行都将收到通知


--notify-mode 0|1 设置通知模式,默认值为0

0: 批量模式,在一个邮件中发送所有域名信息
1: 证书模式,为每一个证书发送一个邮件,如证书过多可能会收到大量邮件

--notify-hook [hookname] 设置通知名称,具体内容请查看 https://github.com/acmesh-official/acme.sh/wiki/notify

卸载 acme.sh

从入门到跑路

1
acme.sh --uninstall