acme.sh 是一款非常轻量、高兼容性的免费 SSL 证书申请工具。它可以自动从 Let's Encrypt 或 ZeroSSL 获取证书,并支持自动续签与自动部署到 Nginx/Apache。
推荐直接使用官方安装脚本:
curl https://get.acme.sh | sh
# 可以看官方的安装文档 https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E安装后执行:
source ~/.bashrc建议绑定 ZeroSSL(兼容性更好,需要邮箱):
acme.sh --set-default-ca --server zerossl # 最新版本已经默认是zerossl了,如果你最近安装的,这一步可以不用做了# 如果你使用的是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.comDNS 验证优势:
证书生成后,使用 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"说明:
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原因通常包括:
解决办法:
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 服务器、多个子域名场景下都非常适用。
输入您的网址查询是否授权