告别手动续期:使用 acme.sh 实现 Nginx 证书全自动化管理
# 通过acme.sh获取 SSL 证书
在使用云服务器搭建完整过程中,若不手动配置 SSL 证书,无法使用 HTTPS 加密访问,会导致一些服务无法使用,常规方案是通过购买云厂商的 SSL 证书,目前云厂商基本上只提供3个月的免费证书,过期后需要续费。
由于云厂商目前将免费证书有效期缩短至 90 天,手动更新的工作量翻了四倍。**acme.sh 配合 Crontab** 是目前实现 HTTPS 自动化的最优解。
## 1. 安装 acme.sh
首先,通过简单的 shell 命令安装。建议使用你的常用邮箱,以便在证书即将过期且自动更新失败时收到警告通知。
```Bash
curl https://get.acme.sh | sh -s email=you@example.com
```
## 2. 选择验证方式
这是获取证书最关键的一步,通常有两种主流方案:
### 方案一: DNS API 验证
这种方式最简单。它不需要修改 Nginx 配置,也不需要开放 80 端口,且支持生成 **通配符证书**(如 `*.lantech.top`)。
1. **获取 API Key**:去你的域名注册商(如阿里云、腾讯云、Cloudflare)后台,生成 API Key 和 Secret,并给这个用户授权DNS编辑相关权限。
2. **导入环境变量**(以阿里云为例):
```Bash
export Ali_Key="你的Key"
export Ali_Secret="你的Secret"
```
3. **申请证书**:
```Bash
acme.sh --issue --dns dns_ali -d lantech.top -d *.lantech.top(换成你的域名)
```
### 方案二:HTTP 验证(单域名方案)
如果你不想动 DNS,且 Nginx 已经在运行:
```bash
acme.sh --issue -d lantech.top --nginx
```
它会临时修改 Nginx 配置来完成验证,完成后自动还原。
## 3.安装证书到 Nginx
**注意:** 不要直接指向 `~/.acme.sh/` 下的证书文件,因为结构可能会变。应该使用 `--install-cert` 命令将证书“分发”到你指定的目录。
```Bash
acme.sh --install-cert -d lantech.top \
--key-file /etc/nginx/ssl/lantech.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "systemctl force-reload nginx"
```
`--reloadcmd` 非常重要,它确保每次证书自动更新后,Nginx 都会重载配置以应用新证书。
## 4.配置Nginx
在你的 Nginx 配置文件中引用刚才安装的路径:
```Nginx
server {
listen 443 ssl;
server_name lantech.top;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/lantech.key;
# 推荐的安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
}
```
部署完成后,你可以使用浏览器点击地址栏的小锁,或在终端输入以下命令查看证书有效期:
```Bash
openssl x509 -in /etc/nginx/ssl/fullchain.cer -noout -dates
```
## 5. 自动化更新
`acme.sh` 在安装时会自动添加一个 **Crontab** 定时任务。你可以通过 `crontab -l` 查看。
- 它每天会检查一次证书,如果证书剩余有效期少于 30 天,它会自动触发更新、分发文件并重载 Nginx。
- **真正实现“一次配置,终身无忧”。**
## 6.写在最后
当我们更新了对应账号的AK和SK之后,需要更新`account.conf`中的信息,以便下次更新。
该文件位于`~/.acme.sh/account.conf`