使用 acme.sh 快速部署 HTTPS 证书指南
本文将详细介绍如何使用 acme.sh 工具为新的域名快速部署 Let’s Encrypt 的免费 HTTPS 证书,并自动配置 Nginx 实现无缝更新与重载。
为什么选择 acme.sh?
在开始之前,让我们先了解一下为什么推荐使用 acme.sh 来管理 HTTPS 证书:
🎯 核心优势
- 全自动续期:Let’s Encrypt 证书有效期仅为 90 天,acme.sh 会自动在到期前 30 天续期,确保证书永不过期
- 零人工干预:一次配置后,完全自动化运行,无需手动操作
- 支持多种 DNS API:内置支持阿里云、腾讯云、Cloudflare 等 80+ DNS 服务商,实现 DNS 自动验证
- 轻量级纯 Shell 脚本:不依赖 Python 等重型运行时,安装简单,资源占用极小
- 生产环境验证:全球数百万用户在使用,稳定性经过充分验证
- 智能重载服务:证书更新后自动重载 Nginx/Apache 等服务,无需手动干预
💡 与传统方式对比
| 特性 | acme.sh | Certbot | 手动申请 |
|---|---|---|---|
| 自动续期 | ✅ 内置 | ✅ 需要配置 cron | ❌ |
| DNS API 支持 | ✅ 80+ 家 | ⚠️ 部分支持 | ❌ |
| 安装复杂度 | ⭐ 简单 | ⭐⭐ 中等 | ⭐⭐⭐ 复杂 |
| 资源占用 | ⭐ 极低 | ⭐⭐ 较高 | - |
| 自动重载 | ✅ 支持 | ⚠️ 需配置 | ❌ |
使用 acme.sh,您可以彻底告别证书过期的烦恼,将更多精力投入到业务开发中。接下来,让我们开始正式部署。
准备工作
前置条件
- 拥有一个有效的域名:确保您的域名已经解析到服务器 IP。
- 安装 Nginx:确保您已经在服务器上安装了 Nginx 并能够正常运行。
- 阿里云账户:由于我们将通过阿里云 DNS API 自动验证域名所有权,因此需要拥有一个阿里云账户,并且域名需托管在阿里云 DNS 下。
安装依赖
首先,我们需要安装 socat 和 curl(如果尚未安装):
sudo apt-get update && sudo apt-get install socat curl -y
步骤一:安装 acme.sh
执行以下命令来安装 acme.sh:
curl https://get.acme.sh | sh -s email=your_email@example.com
安装完成后,重新加载 shell 配置文件或新开终端窗口使环境变量生效:
source ~/.bashrc
步骤二:配置阿里云 DNS API
创建 RAM 子账号并授予其 AliyunDNSFullAccess 权限,然后获取 AccessKey ID 和 Secret。
设置环境变量:
export Ali_Key="your_AccessKey_ID"
export Ali_Secret="your_AccessKey_Secret"
步骤三:申请证书
使用 -d 参数指定您要申请证书的主域名和所有子域名:
acme.sh --issue -d example.com -d www.example.com --dns dns_ali
等待几分钟直到看到成功提示。
步骤四:安装证书并配置自动重载 Nginx
创建证书存储目录:
mkdir -p /etc/nginx/ssl/example.com
安装证书并设置自动重载 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 "sudo systemctl reload nginx"
步骤五:配置 Nginx
编辑 Nginx 配置文件,通常位于 /etc/nginx/sites-available/default 或者单独的配置文件中:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/example.com.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
location / {
root /var/www/html;
index index.html index.htm;
}
}
保存更改后,测试 Nginx 配置是否正确:
sudo nginx -t
如果一切正常,重载 Nginx 以应用更改:
sudo systemctl reload nginx
结语
恭喜!您现在已经成功地为您的新域名部署了 HTTPS 证书,并设置了自动续期和 Nginx 重载。从现在起,您的网站将会更加安全可靠。
请根据实际情况调整上述内容中的具体命令参数,如域名、路径等,以匹配您的实际环境。希望这份指南对您的博客有所帮助!