# acme.sh 安装操作

安装:

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

普通用户和 root 用户皆可安装使用,命令执行完成后,acme.sh 的所有相关脚本和文件都会被统一安装到 ~/.acme.sh/ 目录下,同时会在 ~/.bashrc 环境变量中写入 alias acme.sh=~/.acme.sh/acme.sh 以便执行 acme.sh 脚本。

安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录中: ~/.acme.sh/ ;安装完成后使用 acme.sh -v 测试,如若输出 -bash: acme.sh: command not found ,则需要手动执行:

source ~/.bashrc

整个安装流程分为以下几步:

  1. acme.sh 安装到你当前用户的 home 目录下: ~/.acme.sh/
  2. 通过执行 . "~/.acme.sh/acme.sh.env" 载入到当前用户的环境变量并为其 alias;
  3. 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书,如果快过期了,需要更新,则会自动更新证书。

note:

更多高级安装操作可看:https://github.com/acmesh-official/acme.sh/wiki/How-to-install

# SSL 证书签发

acme.sh 实现了 acme 协议支持的所有验证协议;一般有两种方式验证: HTTP 和 DNS 验证签发。

# HTTP 验证

先说明 HTTP 验证不适用于泛域名证书 *.example.com,并需要对服务器的网站根目录(webroot)具有有写入权限。

# 直接签发

只需要指定域名,并指定域名所在的对应的服务器的网站根目录(webroot), acme.sh 会全自动创建生成临时验证文件,待 CA 机构验证该文件的可访问性及验证该域名所有权后,将会颁发证书,并删除验证文件。

acme.sh --issue -d domain.com -d www.domain.com --webroot /<webroot_path>/

# 独立服务模式

适用场景:服务器上无运行中的 web 服务,80 /tcp 端口处于空闲状态。

以 root 用户,让 acme.sh 开一个 80 端口监听并完成验证:

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

# DNS 验证

DNS 验证与 HTTP 验证的区别在于:你不需要任何服务器,不需要任何公网 IP,只需要获取到 DNS 的解析记录即可为你的域名完成验证。

# 手动验证

>> 如果有自动更新证书的需求,请使用自动验证 <<

手动验证跟下面的自动验证操作仅有一步之差,那就是手动验证不需要 export Namesilo_Key="<key>" ,但需要你手动在域名上添加一条 TXT 记录,验证域名所有权。

申请签发:

acme.sh --issue --dns -d domain.com --keylength 2048
  • --issue 表明该命令执行用于申请发配证书。
  • --dns 默认不带参数表示手动验证;如果带参数,eg: dns_namesilo ,则表明使用 Namesilo 的 DNS 插件,需要配置环境变量,看下文 "自动验证" 中的操作。
  • -d 配置参数表示需要签发的域名,需要申请多个域名,追加 -d example.com 即可。
  • --keylength 参数用于指明密钥类型及长度,可选操作有:
    • RSA: 2048 , 3072 , 4096 , 8192
    • ECC: ec-256 , ec-384 , ec-521

验证签发:

acme.sh --renew -d domain.com

复制证书:

acme.sh --install-cert -d domain.com \
--key-file       /<path>/SSL/private.key  \
--fullchain-file /<path>/SSL/chain.pem \
--capath         /<path>/SSL/ca.pem  \

# 自动验证

进入 SSL 证书签发流程(为了演示不同的操作,这里以泛域名为演示):

1、声明所需变量及设置 CA:

# 导入 Namesilo API Key
export Namesilo_Key="<key>"
# 设置默认 CA 为 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt

note:

  • export 声明的变量,根据 acme 提供的,使用不同的服务商,所需要的验证不一样,这里以 Namesilo 服务商为参考,具体可看:https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_namesilo

  • 参数 <key> 为对应服务商申请提供的 key,不同的服务商可能需要多个 key。

2、签发证书

因为以 Namesilo 服务商为参考,根据上方链接,填入相应的命令:

# 签发 RSA 证书
acme.sh --issue --dns dns_namesilo -d '*.domain.com' --keylength 2048 --dnssleep 1800

note:

  • -d 配置参数表示需要签发的域名,因为这里只用泛域名,所以只有一个 -d '*.domain.com' ,若需要多个则追加,建议主域放在第一个。
  • dnssleep 1800 ,原有默认使用 900S 等待,如果使用的是 Namesilo 建议修改成 1500+,若不进行适当的等待,在验证过程中可能会因为 DNS 记录尚未完全传播而导致验证失败,导致后面的证书不能正确申请。

在申请过程中,期间会自动解析一条名为 _acme-challenge 的 TXT 记录,此时如果你去域名管理页面中查看,,可以看到该 TXT 解析记录,等校验完成后会自动删除,所以建议大家选择 DNS 校验,最后将在指定路径下输出:

Your cert is in: /<path>/<*.domain.com>/xxx.cer
Your cert key is in: /<path>/<*.domain.com>/xxx.key
The intermediate CA cert is in: /<path>/<*.domain.com>/ca.cer
And the full-chain cert is in: /<path>/<*.domain.com>/fullchain.cer

3、安装证书到指定位置

当上一步执行完毕并成功签发证书下来,即可执行如下操作:

# 安装 RSA 证书到指定路径
acme.sh --install-cert -d '*.domain.com' \
--key-file       /<path>/SSL/RSA/private.key  \
--fullchain-file /<path>/SSL/RSA/chain.pem \
--capath         /<path>/SSL/RSA/ca.pem  \
--reloadcmd      "service nginx reload"
  • --install-cert 命令用于把证书复制到目标路径文件;请勿直接使用默认生成的 ~/.acme.sh/ 目录下的证书文件,这里面的文件都是内部使用,而且目录结构将来可能会发生变化。

若是在 “签发证书” 过程中出现错误,仍执行这一步,会提示缺少证书文件。

4、ECC 证书签发并安装(如若不需,跳过即可)

ECC 证书获取跟上面的第二第三点类似,只须把部分参数更改一下即可:

  • --keylength 2048 参数换成 --keylength ec-256
  • acme.sh --install-cert 参数上追加成 acme.sh --install-cert --ecc

ECC 签证完整操作:

# 签发 ECC 证书,若不需要,跳过即可
acme.sh --issue --dns dns_namesilo -d '*.domain.com' --keylength ec-256 --dnssleep 1800
# 安装 ECC 证书到指定路径
acme.sh --install-cert -d '*.domain.com' --ecc \
--key-file       /<path>/SSL/ECC/private.key  \
--fullchain-file /<path>/SSL/ECC/chain.pem \
--capath         /<path>/SSL/ECC/ca.pem  \
--reloadcmd      "service nginx reload"

5、收尾

最后取消先前的 export <key> 的声明,避免 Key 泄露:

# 取消环境变量
unset Namesilo_Key

查看已签证证书:

acme.sh --list
Main_Domain    KeyLength  SAN_Domains  CA               Created               Renew
*.domain.com  "2048"     no           LetsEncrypt.org  2025-08-23T15:31:28Z  2025-10-21T15:31:28Z
*.domain.com  "ec-256"   no           LetsEncrypt.org  2025-08-23T05:06:07Z  2025-10-21T05:06:07Z

查看指定证书的详细信息:

# RSA
acme.sh --info -d <Main_Domain>
# ECC
acme.sh --info -d <Main_Domain> --ecc
# note:<Main_Domain> 为执行 'acme.sh --list' 输出给出的参数

# Namesilo 泛域名签发整流程

# 下方 <domain_conf_path> 为不同域名申请签发存储的文件路径
# 下方 <path> 为调用 SSL 证书所存放的证书路径
# 导入 Namesilo API Key
export Namesilo_Key="<key>"
# 设置默认 CA 为 Let's Encrypt
acme.sh --config-home /<domain_conf_path>/ --set-default-ca --server letsencrypt
# 签发 RSA 证书
acme.sh --config-home /<domain_conf_path>/ --issue --dns dns_namesilo -d '*.domain.com' --keylength 2048 --dnssleep 1800
# 安装 RSA 证书到指定路径
acme.sh --config-home /<domain_conf_path>/ \
--install-cert -d '*.domain.com' \
--key-file       /<path>/SSL/RSA/private.key  \
--fullchain-file /<path>/SSL/RSA/chain.pem \
--capath         /<path>/SSL/RSA/ca.pem  \
--reloadcmd      "service nginx reload"
# 签发 ECC 证书,若不需要,跳过即可
acme.sh --config-home /<domain_conf_path>/ --issue --dns dns_namesilo -d '*.domain.com' --keylength ec-256 --dnssleep 1800
# 安装 ECC 证书到指定路径
acme.sh --config-home /<domain_conf_path>/ \
--install-cert -d '*.domain.com' --ecc \
--key-file       /<path>/SSL/ECC/private.key  \
--fullchain-file /<path>/SSL/ECC/chain.pem \
--capath         /<path>/SSL/ECC/ca.pem  \
--reloadcmd      "service nginx reload"
# 取消环境变量
unset Namesilo_Key
# 查看签证
acme.sh --config-home /<domain_conf_path>/ --list
# 查看指定证书的详细信息 <Main_Domain> 为执行 "查看签证" 输出给出的参数
acme.sh --config-home /<domain_conf_path>/ --info -d <Main_Domain>
# 创建证书续签检查 cron 任务
crontab -e -u <user>
40 0 * * * "/home/<user>/.acme.sh"/acme.sh --cron --home "/home/<user>//.acme.sh" --config-home "/<domain_conf_path>" > /dev/null

# Nginx 签证配置

关于在 Nginx 中使用 SSL 的配置方法放在 Nginx 反代理并安装 SSL 文章中,以便整体了解 Nginx 配置操作。

# 参考

使用 acme.sh 自动签发和更新证书

使用 acme.sh 进行 SSL 证书的申请和自动更新

acme.sh 中文文档

使用 acme.sh 颁发 TLS 证书并安装到 nginx/apache 实现网站 https 访问

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

夏沫の浅雨 微信支付

微信支付

夏沫の浅雨 支付宝

支付宝