acme.sh自动续签SSL证书完整教程:配置一次永久免维护

a
admin
作者
2026-07-13
发布日期
约 9 分钟
阅读时间

acme.sh 是什么

acme.sh 是一个纯Shell脚本实现的ACME协议客户端,用来向Let’s Encrypt、ZeroSSL、Buypass等CA申请免费SSL证书。整个程序就一个sh文件,不依赖Python或Node.js,装完就能用。

和certbot相比,acme.sh的优势:

  • 零依赖,不需要装Python环境和一堆库
  • 支持更多CA,包括ZeroSSL、Buypass、SSL.com
  • 自动安装cron,到期前自动续签
  • 支持DNS API,通配符证书自动签发不用手动加记录

安装 acme.sh

一行命令搞定:

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

或者用git:

git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m your@email.com

装完后重新加载shell配置让alias生效:

source ~/.bashrc

验证安装:

acme.sh --version

看到版本号就说明装好了。acme.sh默认装在 ~/.acme.sh/ 目录下。

申请证书的几种方式

方式一:HTTP验证(80端口开放时用)

最简单的方式,适合80端口能被外网访问的服务器:

acme.sh --issue -d example.com -d www.example.com --webroot /var/www/html/

参数说明

  • -d 指定域名,多个域名加多个 -d
  • --webroot 指定网站根目录,acme.sh会自动放验证文件

如果用Nginx,也可以用standalone模式(会临时占用80端口):

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

方式二:DNS验证(申请通配符证书必用)

通配符证书(*.example.com)只能用DNS验证。手动加记录太麻烦,acme.sh支持各大DNS服务商的API自动操作。

以Cloudflare为例,先在Cloudflare后台创建API Token:

export CF_Token="你的API_Token"
export CF_Account_ID="你的账户ID"

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

国内DNS服务商也支持:

# 阿里云DNS
export Ali_Key="AccessKey_ID"
export Ali_Secret="AccessKey_Secret"
acme.sh --issue --dns dns_ali -d example.com -d *.example.com

# 腾讯云DNSPod
export DP_Id="DNSPod的ID"
export DP_Key="DNSPod的Token"
acme.sh --issue --dns dns_dp -d example.com -d *.example.com

DNS API的好处:一次配置,以后每次续签全自动,包括通配符证书。

安装证书到服务器

申请成功不等于装上了。acme.sh只是把证书文件下载到 ~/.acme.sh/ 目录,还需要”安装”到Nginx/Apache能读到的位置。

Nginx 安装

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

--reloadcmd 很关键:续签后自动重载Nginx让新证书生效,不然白续签了。

Apache 安装

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

自动续签机制

acme.sh安装时自动添加了cron任务,每天凌晨检查所有证书,到期前30天自动续签。

查看cron:

crontab -l | grep acme

输出类似:

0 0 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh

续签流程全自动:申请 → 安装到指定路径 → 执行reloadcmd重载服务。一次配置,永久免维护。

常用管理命令

# 查看所有已签发证书
acme.sh --list

# 强制重新签发(不用等到期)
acme.sh --renew -d example.com --force

# 吊销证书
acme.sh --revoke -d example.com

# 从acme.sh管理列表删除(不删除文件)
acme.sh --remove -d example.com

# 升级acme.sh本身
acme.sh --upgrade

# 设置自动升级
acme.sh --upgrade --auto-upgrade

切换默认CA

acme.sh默认用Let’s Encrypt,可以切换到ZeroSSL(有效期90天,和Let’s Encrypt一样免费):

# 切换到ZeroSSL
acme.sh --set-default-ca --server zerossl

# 切换回Let's Encrypt
acme.sh --set-default-ca --server letsencrypt

# 切换到Buypass(180天有效期,免费)
acme.sh --set-default-ca --server buypass

常见问题

Q:续签失败怎么办?

看日志:

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

最常见原因是80端口被占用DNS API Token过期

Q:证书文件在哪?

默认在 ~/.acme.sh/example.com/ 目录下。但别直接用这个路径,用 --install-cert 复制到标准位置,避免acme.sh更新时路径变动。

Q:怎么测试续签流程?

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

强制续签一次,验证整个流程(申请→安装→重载)是否正常。

配置一次,永久自动。acme.sh是中小网站HTTPS运维的标配工具,把证书续签这件重复劳动彻底自动化掉。

本文到此结束