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 可享受折扣。相关问题可通过搬瓦工官网提交工单咨询。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。