QCMS 智慧中枢

acme.sh 自动部署与自动续签 SSL 证书完整教程

分类:技术分享 时间:2025-12-05 阅读数: 75

acme.sh 自动部署与自动续签 SSL 证书完整教程

acme.sh 是一款非常轻量、高兼容性的免费 SSL 证书申请工具。它可以自动从 Let's Encrypt 或 ZeroSSL 获取证书,并支持自动续签与自动部署到 Nginx/Apache。

 

一、安装 acme.sh

推荐直接使用官方安装脚本:

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

# 可以看官方的安装文档 https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

安装后执行:

source ~/.bashrc

 

二、选择 CA(可选)

建议绑定 ZeroSSL(兼容性更好,需要邮箱):

acme.sh --set-default-ca --server zerossl    # 最新版本已经默认是zerossl了,如果你最近安装的,这一步可以不用做了

 

三、申请证书(DNS 方式推荐)

# 如果你使用的是cloudflare.com 
export CF_Token="你的cloudflare_api_token"
export CF_Account_ID="你的account_id"
#cf申请证书
acme.sh --issue --dns dns_cf -d example.com -d *.example.com

# 我采用的是阿里云 dns 方式
export Ali_Key="你的Ali_Key"
export Ali_Secret="你的Ali_Secret"
#ali申请证书
acme.sh --issue --dns dns_ali -d *.example.com

DNS 验证优势:

  • 支持泛域名
  • 服务器不需要暴露 80 或 443
  • 更稳定、自动化程度高

 

四、部署证书到 Nginx

证书生成后,使用 deploy 安装到 Nginx:

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

说明:

  • --key-file:私钥路径
  • --fullchain-file:证书链路径
  • --reloadcmd:证书更新后自动执行的命令(重载 Nginx)

 

五、Nginx 配置示例

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /etc/nginx/ssl/*.example.com/*.example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/*.example.com/*.example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ciphers HIGH:!aNULL:!MD5:!EXP:!RC4:!DES:!3DES;

    location / {
        proxy_pass http://localhost:8080;
    }
}

 

六、自动续签机制说明

acme.sh 每天自动检测证书是否快过期,若剩余 30 天内,会自动续签并执行配置的 reload 命令:

# 自动续签设置
0 0 * * * "~/.acme.sh"/acme.sh --cron --home "~/.acme.sh" > /dev/null

无需人工干预,非常适合生产环境。

 

七、手动测试续签

如果想验证是否工作正常:

# 手动续签测试
acme.sh --cron

# 单个域名手动续签测试
acme.sh --renew -d example.com --force

 

八、常见问题

1. 小程序出现 ERR_SSL_VERSION_OR_CIPHER_MISMATCH?

原因通常包括:

  • 你的服务器启用了过旧的加密套件
  • 证书链不完整
  • TLS 版本被限制在 TLS 1.1 以下

解决办法:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5:!EXP:!RC4:!DES:!3DES;

并确保:

acme.sh --install-cert ...

生成的 fullchain.crt 中包含完整证书链。

 

九、总结

使用 acme.sh 能让 SSL 证书的申请、安装和续签完全自动化,不仅可靠,而且可大幅减少运维成本。特别在微信小程序、API 服务器、多个子域名场景下都非常适用。

热门文章
acme.sh 自动部署与自动续签 SSL 证书完整教程 Linux 下 rsync daemon 完整部署教程(从安装到同步) acme.sh 证书在小程序无法访问的解决方案(ERR_SSL_VERSION_OR_CIPHER_MISMATCH) Ubuntu 安装 Docker 最全教程(最新) 常用 Docker 命令与实用案例整理(镜像管理、容器管理、部署示例)

相关模板推荐

域名授权查询

输入您的网址查询是否授权