acme.sh SSL 证书申请教程
acme.sh 是一个纯 Shell 脚本实现的 ACME 协议客户端,可以从 Let's Encrypt、ZeroSSL 等证书颁发机构申请免费的 SSL/TLS 证书。它不依赖 Python 或其他运行时环境,非常适合在搬瓦工 VPS 等轻量服务器上使用。本文将详细介绍 acme.sh 的安装、证书申请、自动续期和 Web 服务器配置。
一、安装 acme.sh
1.1 在线安装
curl https://get.acme.sh | sh -s email=your@email.com
安装完成后需要重新加载 Shell 环境:
source ~/.bashrc
1.2 设置默认 CA
acme.sh 默认使用 ZeroSSL,也可以切换到 Let's Encrypt:
# 使用 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
# 使用 ZeroSSL(默认)
acme.sh --set-default-ca --server zerossl
1.3 验证安装
acme.sh --version
二、HTTP 验证方式申请证书
2.1 Webroot 模式
如果已经有 Web 服务器在运行(如 Nginx 或 Apache),推荐使用 Webroot 模式:
acme.sh --issue -d example.com -d www.example.com -w /var/www/html
acme.sh 会在指定的 Web 根目录下创建验证文件,CA 通过 HTTP 访问该文件来验证域名所有权。
2.2 Standalone 模式
如果服务器上还没有 Web 服务在运行,可以使用 Standalone 模式,acme.sh 会临时监听 80 端口:
# 确保 80 端口没有被占用
acme.sh --issue -d example.com --standalone
2.3 Nginx 模式
acme.sh 可以直接操作 Nginx 配置进行验证:
acme.sh --issue -d example.com -d www.example.com --nginx
2.4 Apache 模式
acme.sh --issue -d example.com -d www.example.com --apache
三、DNS 验证方式申请证书
DNS 验证无需开放 80 端口,适合内网服务器或需要申请通配符证书的场景。
3.1 手动 DNS 验证
acme.sh --issue -d example.com -d '*.example.com' --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
命令执行后会提示需要添加的 TXT 记录,手动到 DNS 管理面板添加后,再执行续签命令。
3.2 API 自动 DNS 验证(推荐)
acme.sh 支持数十种 DNS 服务商的 API,实现全自动验证。以 Cloudflare 为例:
# 设置 Cloudflare API 凭据
export CF_Token="your-cloudflare-api-token"
export CF_Zone_ID="your-zone-id"
# 申请证书(包含通配符)
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
其他常用 DNS 服务商:
# 阿里云 DNS
export Ali_Key="your-access-key"
export Ali_Secret="your-access-secret"
acme.sh --issue -d example.com --dns dns_ali
# 腾讯云 DNSPod
export DP_Id="your-id"
export DP_Key="your-key"
acme.sh --issue -d example.com --dns dns_dp
# Namesilo
export Namesilo_Key="your-api-key"
acme.sh --issue -d example.com --dns dns_namesilo
四、安装证书到 Web 服务器
申请到的证书需要安装到 Web 服务器的指定位置。不要直接使用 acme.sh 目录下的证书文件,应该通过 --install-cert 命令安装。
4.1 安装到 Nginx
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.pem \
--reloadcmd "systemctl reload nginx"
4.2 安装到 Apache
acme.sh --install-cert -d example.com \
--cert-file /etc/apache2/ssl/cert.pem \
--key-file /etc/apache2/ssl/key.pem \
--fullchain-file /etc/apache2/ssl/fullchain.pem \
--reloadcmd "systemctl reload apache2"
4.3 Nginx SSL 配置示例
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=63072000" always;
root /var/www/html;
index index.html;
}
五、证书自动续期
acme.sh 安装时会自动创建 Crontab 任务,每天检查证书是否需要续期。证书有效期通常为 90 天,acme.sh 会在到期前 30 天自动续期。
# 查看自动续期任务
crontab -l | grep acme
# 手动续期测试
acme.sh --renew -d example.com --force
# 查看所有证书状态
acme.sh --list
六、ECC 证书
ECC(椭圆曲线)证书比 RSA 证书更小更快,推荐使用:
# 申请 ECC 证书
acme.sh --issue -d example.com -d www.example.com --dns dns_cf --keylength ec-256
# 安装 ECC 证书
acme.sh --install-cert -d example.com --ecc \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.pem \
--reloadcmd "systemctl reload nginx"
七、常用管理命令
# 查看已申请的所有证书
acme.sh --list
# 查看证书详情
acme.sh --info -d example.com
# 吊销证书
acme.sh --revoke -d example.com
# 删除证书
acme.sh --remove -d example.com
# 升级 acme.sh
acme.sh --upgrade
# 开启自动升级
acme.sh --upgrade --auto-upgrade
八、常见问题
验证失败
检查域名 DNS 解析是否指向搬瓦工 VPS 的 IP,确认 80 端口可以从外网访问:
# 检查 DNS 解析
dig example.com A
# 检查 80 端口
curl -I http://example.com
速率限制
Let's Encrypt 有速率限制,同一域名每周最多申请 5 次。测试时建议使用 staging 服务器:
acme.sh --issue -d example.com --standalone --staging
续期失败
查看 acme.sh 日志:
cat ~/.acme.sh/acme.sh.log
常见原因包括 DNS 配置变更、80 端口被占用或 API 凭据过期。
总结
acme.sh 是在搬瓦工 VPS 上管理 SSL 证书的最佳工具之一,支持多种 CA 和验证方式,自动续期功能可以让你一劳永逸。为你的网站启用 HTTPS 不仅提升安全性,也有利于 SEO。如果需要本地开发环境的 SSL 证书,可以参考 mkcert 本地开发 SSL 教程。选购搬瓦工 VPS 请查看全部方案,使用优惠码 NODESEEK2026 可享受折扣。相关问题可通过搬瓦工官网提交工单咨询。