> For AI agents: the complete documentation index is available at https://docs.vps.town/llms.txt, the full documentation bundle is available at https://docs.vps.town/llms-full.txt.

# 如何使用 Acme.sh 自动更新 Nginx 网站证书

:::tip 温馨提示

本文由用户 `biebiele` 撰写，并已加入 `VPS.Town 优秀原创文章激励计划`，未经允许不得转载。

本文已通过 [VPS.Town 社区文章投稿及奖励规则 (试行稿)](https://docs.vps.town/kb/community.md) 审核，并获得 `--` 奖励。

:::

:::details 📖 本文目录

[](#1-acmesh-安装)[](#2-使用-cloudflare-dns-api-验证)[](#21-添加您的域名到-cloudflare)[](#22-创建-api-令牌)[](#23-区域-id-和账户-id)[](#24-申请-ssl-域名证书)[](#3-nginx-等程序配置-ssl)
:::

:::note 介绍

Acme.sh 是一个纯粹用 Shell（Unix shell）语言编写的 ACME 协议客户端。可自动帮您申请 SSL 证书并自动更新。

:::

## 1. acme.sh 安装

```bash title="bash"
# 将 my@example.com 换成您自己的邮箱地址
curl https://get.acme.sh | sh -s email=my@example.com
```

:::tip 小贴士
安装完成后，程序安装在`/root/.acme.sh/`下，且可在任何地方使用`acme.sh`命令
:::

![acme.sh安装完成界面](/assets/images/how-to-use-acme.sh-vps-town/1.png)

## 2. 使用 CloudFlare DNS api 验证

### 2.1. 添加您的域名到 CloudFlare

- `账户主页`-`添加域`：按照页面指示添加您的个人域名
  ![CloudFlare添加域名界面](/assets/images/how-to-use-acme.sh-vps-town/2.png)

- `选择计划`：选择下方的`free计划`，点击`继续`
  ![CloudFlare选择免费计划界面](/assets/images/how-to-use-acme.sh-vps-town/3.png)

- `dns记录`：会自动导入已有的 dns 记录，检查没什么问题，点击继续
  ![CloudFlare DNS记录导入界面](/assets/images/how-to-use-acme.sh-vps-town/4.png)

- `更新名称服务器`：根据指引，在您域名之前网站，修改 ns 记录。主要删除原来的 dns 锁定和删除并添加新的 ns 记录
  ![CloudFlare更新名称服务器界面](/assets/images/how-to-use-acme.sh-vps-town/5.png)

- `验证`：修改完成后，检查添加状态是否正常，如不正常，可手动最下方立即检查或手动检查添加过程是否正确
  ![CloudFlare域名验证界面](/assets/images/how-to-use-acme.sh-vps-town/6.png)

### 2.2. 创建 API 令牌

![CloudFlare API令牌创建入口](/assets/images/how-to-use-acme.sh-vps-town/7.png)

- 点击创建令牌
  ![CloudFlare创建令牌界面](/assets/images/how-to-use-acme.sh-vps-town/8.png)
- 选择使用模版 `编辑区域dns`
  ![CloudFlare选择API模板界面](/assets/images/how-to-use-acme.sh-vps-town/9.png)
- 权限配置
  ![CloudFlare API权限配置界面](/assets/images/how-to-use-acme.sh-vps-town/10.png)
- 确定创建令牌
  ![CloudFlare确认创建令牌界面](/assets/images/how-to-use-acme.sh-vps-town/11.png)
- 复制生成的 token 值
  ![CloudFlare API令牌生成结果](/assets/images/how-to-use-acme.sh-vps-town/12.png)

### 2.3. 区域 ID 和账户 ID

![CloudFlare区域ID和账户ID位置](/assets/images/how-to-use-acme.sh-vps-town/13.png)

### 2.4. 申请 SSL 域名证书

```bash
# API令牌：上述步骤获取的令牌token值
export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs"

# 以下二选一
# 单个域名：上述区域ID值
export CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
# 多个域名：上述账户ID值
# export CF_Account_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
```

- 配置以上环境变量后，手动执行申请

```bash
# 以下申请ssl通配证书，根据提示操作
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'
```

:::tip 小贴士
设置和使用的任何环境变量都将保存在 \~/.acme.sh/account.conf
:::

检查脚本执行日志，是否获取证书正常，提示证书文件保存在何地
![acme.sh证书申请成功界面](/assets/images/how-to-use-acme.sh-vps-town/14.png)

- 后续定期更新，是由计划任务 cron 里的定期检查和自动更新
  ![acme.sh自动更新计划任务](/assets/images/how-to-use-acme.sh-vps-town/15.png)

## 3. nginx 等程序配置 ssl

在`nginx.conf`配置文件，添加 ssl 相关配置并重启服务，浏览器检查 https 访问是否正常。以下供参考：

```bash
        ssl_certificate      /opt/ssl_cert.pem;
        ssl_certificate_key /opt/ssl_key.pem;

        ssl_protocols             TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers               ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305;
        ssl_ecdh_curve            secp521r1:secp384r1:secp256r1:x25519;
```

![Nginx SSL配置示例](/assets/images/how-to-use-acme.sh-vps-town/16.png)
