ACME.sh 证书管理工具使用指南

1. 安装方法

请使用root权限运行以下命令(否则独立证书申请模式将无法工作):

curl https://get.acme.sh | sh -s email=my@example.com

或:

wget -O - https://get.acme.sh | sh -s email=my@example.com

安装程序会执行以下3个操作:

  1. 创建并将 acme.sh复制到家目录 ($HOME):~/.acme.sh/
    所有证书也将存放在此目录
  2. 创建命令别名:acme.sh=~/.acme.sh/acme.sh
  3. 创建每日定时任务,自动检查并续期证书

定时任务示例:

0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null

安装完成后,需要关闭当前终端并重新打开,才能使别名生效。

现在可以开始申请证书了。

查看脚本帮助信息:

acme.sh --help

2. 独立模式申请证书

(需要root/sudo权限或具有监听80端口的权限)

必须确保 80端口(TCP)处于空闲状态且全球可访问,否则会提示释放端口后重试。

根据官方文档,使用 --issue命令时可添加 --httpport参数指定HTTP端口。

acme.sh有时无法正确识别Nginx配置中的webroot路径,因此我们使用独立模式,这种方式更可靠但需要保持端口开放以便自动续期。

监听端口不会有安全隐患,因为只有在acme.sh续期时才会有应用占用该端口。参考:最佳实践-保持80端口开放

示例1:单域名

acme.sh --issue -d mydomain.com --standalone

示例2:多域名同一证书

acme.sh --issue -d example.com --standalone -d www.example.com -d cp.example.com

注意:

  • 第二个参数"-d example.com"是主域名
  • 所有域名必须解析并绑定到同一服务器
  • 证书将存放在 ~/.acme.sh/example.com/
  • 证书默认每60天自动续期

更多示例参考:如何申请证书

3. 为Nginx安装证书

证书生成后,需要将证书复制到Nginx等服务器。
必须使用以下命令复制证书,不要直接使用 ~/.acme.sh/目录下的证书文件。

Nginx示例:

acme.sh --install-cert -d example.com \  # 第一个域名用于定位证书
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"  # root用户无需sudo

注意事项:

  • 只有域名参数是必选的
  • 会保留现有文件的权限设置,可预先创建文件来定义权限
  • 证书默认每60天续期一次,续期后会自动执行reloadcmd命令
  • reloadcmd参数至关重要,没有正确的reloadcmd,证书续期后可能无法应用到服务器

4. 申请ECC证书

只需在 keylength参数前添加 ec-前缀。

acme.sh --issue --standalone -d example.com -d www.example.com --keylength ec-256

有效参数值:

  1. ec-256 (prime256v1,"ECDSA P-256",默认密钥类型)
  2. ec-384 (secp384r1,"ECDSA P-384")
  3. ec-521 (secp521r1,"ECDSA P-521",Let's Encrypt暂不支持)
  4. 2048 (RSA2048)
  5. 3072 (RSA3072)
  6. 4096 (RSA4096)

5. 证书续期

所有证书默认每60天自动续期。您也可以手动强制续期:

普通证书:

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

ECC证书:

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

6. 停止证书续期

执行以下命令可将证书移出续期列表:

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

注意:

  • 证书文件不会从磁盘删除
  • 可手动删除对应目录(如 ~/.acme.sh/example.com

7. 升级acme.sh

acme.sh持续开发中,强烈建议使用最新版本。

手动升级:

acme.sh --upgrade

启用自动升级:

acme.sh --upgrade --auto-upgrade

禁用自动升级:

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