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个操作:
- 创建并将
acme.sh
复制到家目录 ($HOME
):~/.acme.sh/
所有证书也将存放在此目录 - 创建命令别名:
acme.sh=~/.acme.sh/acme.sh
- 创建每日定时任务,自动检查并续期证书
定时任务示例:
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
有效参数值:
- ec-256 (prime256v1,"ECDSA P-256",默认密钥类型)
- ec-384 (secp384r1,"ECDSA P-384")
- ec-521 (secp521r1,"ECDSA P-521",Let's Encrypt暂不支持)
- 2048 (RSA2048)
- 3072 (RSA3072)
- 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