- [使用 acme.sh 申请域名 SSL/TLS 证书完整指南](#使用 acme.sh 申请域名 SSL/TLS 证书完整指南)
- 简介
- [为什么选择 acme.sh 和 ZeroSSL?](#为什么选择 acme.sh 和 ZeroSSL?)
- 前置要求
- 安装过程
- 证书申请
- [方法一:手动 DNS 验证(推荐新手使用)](#方法一:手动 DNS 验证(推荐新手使用))
- [方法二:自动 DNS API 验证](#方法二:自动 DNS API 验证)
- 证书安装和管理
- [步骤一:创建 SSL 目录](#步骤一:创建 SSL 目录)
- 步骤二:安装证书
- [步骤三:配置 Nginx](#步骤三:配置 Nginx)
- [步骤四:测试并重启 Nginx](#步骤四:测试并重启 Nginx)
- 证书文件说明
- 自动续期
- 验证过程
- 故障排除提示
- 安全最佳实践
- 总结
使用 acme.sh 申请域名 SSL/TLS 证书完整指南
简介
本指南将详细介绍如何使用 acme.sh 配合 ZeroSSL 获取和管理 SSL/TLS 证书。我们将以 cheungxiongwei.com 为例,介绍从安装到自动续期的完整过程,包括根域名和泛域名证书的配置。
为什么选择 acme.sh 和 ZeroSSL?
- 免费无限证书:可以免费生成无限数量的90天 SSL 证书
- 支持泛域名:使用单个证书即可保护无限数量的子域名
- 自动化管理:内置证书续期和部署功能
- 多域名支持:可同时为多个域名颁发证书
- 账户集成:所有证书都存储在您的 ZeroSSL 账户中
前置要求
- 一台具有 root 访问权限的 Linux 服务器
- 已注册的域名
- 基本的命令行使用知识
- 域名 DNS 设置的访问权限
安装过程
步骤一:安装 acme.sh
bash
curl https://get.acme.sh | sh
source ~/.bashrc
acme.sh --version
步骤二:配置 ZeroSSL
- 设置 ZeroSSL 为默认证书颁发机构:
bash
acme.sh --set-default-ca --server zerossl
- 设置 ZeroSSL EAB(外部账户绑定)凭证:
- 访问 ZeroSSL 控制面板
- 生成 EAB 凭证
- 配置凭证:
bash
export ZERO_EAB_KEY="你的_eab_key"
export ZERO_EAB_HMAC="你的_eab_hmac"
证书申请
方法一:手动 DNS 验证(推荐新手使用)
- 启动证书申请:
bash
acme.sh --issue --dns -d cheungxiongwei.com -d "*.cheungxiongwei.com" --yes-I-know-dns-manual-mode-enough-go-ahead-please
- 添加 DNS TXT 记录:
记录类型 | 主机记录 | 记录值 |
---|---|---|
TXT | _acme-challenge | [提供的值] |
TXT | _acme-challenge.* | [提供的值] |
- 验证 DNS 解析:
bash
dig TXT _acme-challenge.cheungxiongwei.com
dig TXT _acme-challenge.*.cheungxiongwei.com
- 完成证书颁发:
bash
acme.sh --renew -d cheungxiongwei.com -d "*.cheungxiongwei.com" --yes-I-know-dns-manual-mode-enough-go-ahead-please
方法二:自动 DNS API 验证
- 配置 DNS API 凭证(以 DNSPod 为例):
bash
export DP_Id="API_ID"
export DP_Key="API_KEY"
- 颁发证书:
bash
acme.sh --issue --dns dns_dp -d cheungxiongwei.com -d "*.cheungxiongwei.com"
证书安装和管理
步骤一:创建 SSL 目录
bash
sudo mkdir -p /etc/ssl/cheungxiongwei.com
步骤二:安装证书
bash
acme.sh --install-cert -d cheungxiongwei.com \
--key-file /etc/ssl/cheungxiongwei.com/cheungxiongwei.com.key \
--fullchain-file /etc/ssl/cheungxiongwei.com/fullchain.cer \
--reloadcmd "systemctl reload nginx"
步骤三:配置 Nginx
nginx
server {
listen 443 ssl;
server_name cheungxiongwei.com *.cheungxiongwei.com;
ssl_certificate /etc/ssl/cheungxiongwei.com/fullchain.cer; # 使用完整证书链
ssl_certificate_key /etc/ssl/cheungxiongwei.com/cheungxiongwei.com.key; # 使用私钥文件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/cheungxiongwei.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name cheungxiongwei.com *.cheungxiongwei.com;
return 301 https://$host$request_uri;
}
步骤四:测试并重启 Nginx
bash
sudo nginx -t
sudo systemctl restart nginx
证书文件说明
- fullchain.cer:完整的证书链,用于服务器配置
- cheungxiongwei.com.key:私钥(需要安全保管)
- ca.cer:中间证书
- cheungxiongwei.com.cer:域名证书
自动续期
acme.sh 包含内置的 cron 任务,每天检查证书续期。我们之前使用的 --install-cert 命令已经配置了自动续期并重载 Nginx。
验证过程
- 检查 HTTPS 连接:访问 https://cheungxiongwei.com
- 验证泛域名证书:测试任意子域名,如 https://www.cheungxiongwei.com
- 在浏览器中检查证书详情
故障排除提示
- 如果 DNS 验证失败,等待 10-15 分钟让解析生效
- 检查 Nginx 错误日志:
sudo tail -f /var/log/nginx/error.log
- 验证 Nginx 配置中的证书路径
- 确保 SSL 证书文件权限正确
安全最佳实践
- 确保私钥安全并做好备份
- 仅使用 TLS 1.2 和 1.3 版本
- 定期监控证书过期时间
- 维护证书文件的安全备份
- 使用强加密的 SSL 密码配置
总结
现在您的域名已经配置了完整的根域名和泛域名 SSL 证书保护。该设置包括自动续期和优化的 Nginx 安全配置。建议定期使用在线 SSL 测试工具检查 SSL 配置,以确保符合最佳实践和安全更新。