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

4.6 KiB
Raw Blame History

宝塔 Nginx + DNS 验证 申请 SSL 证书(详细操作顺序)

适用:已建好站点 st-joyapparel.com、运行目录=/public、已配前端控制器伪静态。 用 DNS 验证可以完全绕开 .well-known/acme-challenge 路径问题,最稳。


一、前置确认(1 分钟)

  1. 域名 st-joyapparel.com 已在宝塔「网站」里建好站点。
  2. 域名解析里至少有一条 A 记录指向服务器 47.107.30.116 (这样证书签发后 HTTPS 才能真正用起来;DNS 验证本身不要求域名解析到本机,但上线必须)。
  3. 宝塔 → 网站 → st-joyapparel.com → 设置 → 网站目录 → 运行目录 = /public(已设过可跳过)。
  4. 伪静态里只保留前端控制器那条(去掉之前为 HTTP 验证加的 .well-known location 也行,DNS 用不到它):
    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. 回到 网站 → st-joyapparel.comSSLLet's Encrypt
  6. 验证方式下拉选 DNS验证(或「DNS API」)。
  7. 勾选要签的域名(st-joyapparel.comwww.st-joyapparel.com)。
  8. 申请。宝塔会自动添加 TXT 记录 → 等待 CA 校验 → 自动签发并部署
  9. 完成后页面显示「证书已部署」,结束。

优点:以后自动续签也全自动,不用每年手动加记录。


三、方式 B:手动 DNS(TXT 记录)验证

没有 API 密钥时用这个。缺点:下次续签要再手动加一次 TXT(除非改用 API)。

  1. 网站 → st-joyapparel.comSSLLet's Encrypt
  2. 验证方式选 DNS验证
  3. 页面会列出需要你手动添加的 DNS 记录,一般是:
    • 记录类型:TXT
    • 主机记录:_acme-challenge(完整即 _acme-challenge.st-joyapparel.com
    • 记录值:一长串字符(如 S7ASyftFIXsmMfhFqydT7QfMsFpsmTXRLD7FMZd_AIY 之类,以页面显示为准)
    • (如果要给 www 也签,会再给一条 _acme-challenge.www 的 TXT
  4. 另开一个标签页,登录你的域名解析控制台 (阿里云:域名 → 解析设置;腾讯云:DNS 解析;DNSPod / Namesilo 等同理)。
  5. 添加上面那条 TXT 记录,保存。
  6. 等解析生效(看 TTL,通常 1–10 分钟;用下面命令自查):
    nslookup -type=TXT _acme-challenge.st-joyapparel.com
    # 或 Windows:
    nslookup -type=TXT _acme-challenge.st-joyapparel.com 8.8.8.8
    
    看到记录值和你填的一致,说明生效。
  7. 回到宝塔,点 验证 / 申请。CA 读到 TXT 后即签发并自动部署。

四、签发后必做

  1. SSL 页确认证书状态为「已部署」,有效期约 90 天。
  2. 开启 强制 HTTPSSSL 页里有开关)→ 访问 http:// 自动跳 https://
  3. 浏览器访问 https://st-joyapparel.com/https://www.st-joyapparel.com/,确认:
    • 地址栏出现小锁 🔒
    • 前台页面、后台 /admin 都正常(之前配的 try_files 继续生效)
  4. 跑部署收尾(若还没跑):
    cd /www/wwwroot/st-joyapparel.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 地址