Files
coolcoth.com/bt-ssl-dns.md
T
2026-08-08 16:37:32 +08:00

99 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 宝塔 Nginx + DNS 验证 申请 SSL 证书(详细操作顺序)
> 适用:已建好站点 `coolcoth.com`、运行目录=`/public`、已配前端控制器伪静态。
> 用 DNS 验证可以**完全绕开** `.well-known/acme-challenge` 路径问题,最稳。
---
## 一、前置确认(1 分钟)
1. 域名 `coolcoth.com` 已在宝塔「网站」里建好站点。
2. 域名解析里**至少有一条 A 记录**指向服务器 `47.107.30.116`
(这样证书签发后 HTTPS 才能真正用起来;DNS 验证本身不要求域名解析到本机,但上线必须)。
3. 宝塔 → 网站 → `coolcoth.com` → 设置 → 网站目录 → **运行目录 = `/public`**(已设过可跳过)。
4. 伪静态里**只保留**前端控制器那条(去掉之前为 HTTP 验证加的 `.well-known` location 也行,DNS 用不到它):
```nginx
try_files $uri $uri/ /index.php?$query_string;
```
---
## 二、方式 A:DNS API 自动验证(最推荐,零手动)
> 前提:域名在阿里云 / 腾讯云 / DNSPod / 华为云等主流平台,且你能拿到 API 密钥。
1. 宝塔左侧 **面板设置**(或站点 SSL 页里的「DNS API」入口)。
2. 找到 **DNS API** 配置,选择你的域名服务商(如「阿里云」)。
3. 填入:
- AccessKey ID
- AccessKey Secret
(在对应云服务商的「访问控制 / API 密钥」里创建,**只给 DNS 解析权限**即可,别给全量权限)
4. 保存。
5. 回到 网站 → `coolcoth.com` → **SSL** → **Let's Encrypt**。
6. 验证方式下拉选 **DNS验证**(或「DNS API」)。
7. 勾选要签的域名(`coolcoth.com` 和 `www.coolcoth.com`)。
8. 点 **申请**。宝塔会自动添加 TXT 记录 → 等待 CA 校验 → **自动签发并部署**。
9. 完成后页面显示「证书已部署」,结束。✅
> 优点:以后**自动续签**也全自动,不用每年手动加记录。
---
## 三、方式 B:手动 DNS(TXT 记录)验证
> 没有 API 密钥时用这个。缺点:下次续签要再手动加一次 TXT(除非改用 API)。
1. 网站 → `coolcoth.com` → **SSL** → **Let's Encrypt**。
2. 验证方式选 **DNS验证**。
3. 页面会列出**需要你手动添加的 DNS 记录**,一般是:
- 记录类型:**TXT**
- 主机记录:**`_acme-challenge`**(完整即 `_acme-challenge.coolcoth.com`
- 记录值:一长串字符(如 `S7ASyftFIXsmMfhFqydT7QfMsFpsmTXRLD7FMZd_AIY` 之类,以页面显示为准)
- (如果要给 `www` 也签,会再给一条 `_acme-challenge.www` 的 TXT
4. **另开一个标签页**,登录你的域名解析控制台
(阿里云:域名 → 解析设置;腾讯云:DNS 解析;DNSPod / Namesilo 等同理)。
5. 添加上面那条 TXT 记录,保存。
6. **等解析生效**(看 TTL,通常 1–10 分钟;用下面命令自查):
```bash
nslookup -type=TXT _acme-challenge.coolcoth.com
# 或 Windows:
nslookup -type=TXT _acme-challenge.coolcoth.com 8.8.8.8
```
看到记录值和你填的一致,说明生效。
7. 回到宝塔,点 **验证 / 申请**。CA 读到 TXT 后即签发并自动部署。
---
## 四、签发后必做
1. SSL 页确认证书状态为「已部署」,有效期约 90 天。
2. 开启 **强制 HTTPS**SSL 页里有开关)→ 访问 `http://` 自动跳 `https://`。
3. 浏览器访问 `https://coolcoth.com/` 和 `https://www.coolcoth.com/`,确认:
- 地址栏出现小锁 🔒
- 前台页面、后台 `/admin` 都正常(之前配的 `try_files` 继续生效)
4. 跑部署收尾(若还没跑):
```bash
cd /www/wwwroot/coolcoth.com
bash deploy.sh
rm -rf install # 删安装目录
```
后台 → 设置 → 管理员,改掉默认密码 `admin888`。
---
## 五、自动续签
- **DNS API 方式**:宝塔默认会在计划任务里加 Let's Encrypt 自动续签,到期前自动换证,无需人工。
- **手动 DNS 方式**:续签时 TXT 记录值会变,需重新加一次(建议趁机切到 API 方式一劳永逸)。
---
## 六、常见坑
| 现象 | 原因 | 处理 |
|---|---|---|
| 申请一直转圈/超时 | API 密钥权限不对或填错 | 核对 AccessKey,只给 DNS 权限 |
| 手动 DNS 提示「记录未找到」 | TXT 还没生效 / 主机名填错 | `nslookup` 自查,确认是 `_acme-challenge` 而非 `@` |
| 证书有了但网站打不开 | 运行目录不是 `/public` 或伪静态丢了 | 按「一、4」补齐 |
| 浏览器红色「非安全」 | 页面里混用了 http 资源 | 后台/主题里图片、JS 改用相对或 https 地址 |