数字化技能提升教程,数字化时代生存宝典

Sub2API生产域名HTTPS接入与安全初始化

浏览:22

1. 目标、范围与 HTTPS 拓扑

本文记录实验网关承载 Authentik、Sub2API A 和 Sub2API B 的 HTTPS 验收流程。网关使用本机 20443 端口,通过 Host 将三个独立域名的请求分流到对应服务。本文仅整理本轮已执行的检查命令及返回结果,不补写尚未采集的 Nginx 上游配置。

三个 HTTPS 访问地址如下:

https://auth.lab.test:20443
https://sub2a.lab.test:20443
https://sub2b.lab.test:20443

2. 正式域名、端口和证书前置检查

开始前,先确认客户端通过正式 HTTPS 域名访问,而不是直接访问容器端口。网关监听 20443 端口,证书的 SAN 必须覆盖三个 Host;缺少任一域名,都可能导致浏览器提示证书名称不匹配

openssl x509 -in /opt/lab-gateway/certs/lab-server.crt -noout -subject -issuer -dates -ext subjectAltName

3. 网关 Compose 状态确认

进入网关目录,检查容器运行状态。本轮记录中,容器名为 lab-gateway,使用 Nginx 镜像,状态为 healthy,端口映射显示为 127.0.0.1:20443->20443/tcp。

cd /opt/lab-gateway
docker compose -f compose.yml ps

网关容器状态及端口映射

4. TLS 证书主题与 SAN 检查

本轮检查中,证书主题为 CN = auth.lab.test,签发者为 Codex Lab Root CA。SAN 同时包含 auth.lab.test、sub2a.lab.test 和 sub2b.lab.test,有效期为 2026 年 8 月 25 日至 2028 年 11 月 27 日。

分别查看证书基本信息与 SAN:

openssl x509 -in /opt/lab-gateway/certs/lab-server.crt -noout -subject -issuer -dates
openssl x509 -in /opt/lab-gateway/certs/lab-server.crt -noout -ext subjectAltName

证书主题、签发者、有效期及 SAN 检查结果

5. Nginx 配置语法检查

确认证书内容后,再执行 Nginx 配置语法检查。语法检查通过,只说明配置可以被解析,不代表三个上游服务均能连通,后续仍需检查 Host 分流。

docker exec lab-gateway nginx -t

返回 syntax is ok 和 test is successful 后,再进入路由验收。

Nginx 配置语法检查通过结果

6. Sub2API A HTTPS 路由检查

Sub2API A 使用 sub2a.lab.test 作为 Host。下面的命令连接回环地址,并使用 -k 跳过证书信任和主机名校验,因此检查的是 HTTPS 监听、Host 分流及反向代理路径,不验证 DNS 解析或客户端证书信任。证书 SAN 与有效期需按第 4 节单独检查。

curl -ksS -H 'Host: sub2a.lab.test:20443' https://127.0.0.1:20443/health

返回 {"status":"ok"},说明请求已通过 A 的 HTTPS 路由到达应用健康接口。

Authentik Ready 端点返回 HTTP 200

7. Sub2API B HTTPS 路由检查

Sub2API B 使用独立的 sub2b.lab.test Host。即使 A 已检查成功,也需要单独检查 B,排查两个 Host 意外指向同一上游或端口的情况。

curl -ksS -H 'Host: sub2b.lab.test:20443' https://127.0.0.1:20443/health

在本轮三域名分流检查中,B 的 /health 返回 HTTP 200。

8. Authentik HTTPS 路由检查

Authentik 使用 auth.lab.test Host。这里检查 Ready 端点,避免将首页重定向误判为服务已经就绪。

curl -ksS -H 'Host: auth.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/-/health/ready/

返回 HTTP 200,说明网关可以将 Authentik 的就绪检查请求转发至相应服务。

9. 三域名分流与健康接口验收

将三个 Host 的检查结果放在一起核对,要求各端点状态码均为 200。命令使用 -o /dev/null 丢弃响应正文,并通过 -w 输出 HTTP 状态码,避免将页面内容误当作状态结果。

curl -ksS -H 'Host: auth.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/-/health/ready/
curl -ksS -H 'Host: sub2a.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/health
curl -ksS -H 'Host: sub2b.lab.test:20443' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:20443/health

本轮返回结果为 200 / 200 / 200。

服务 Host 检查端点 本轮状态码
Authentik auth.lab.test /-/health/ready/ 200
Sub2API A sub2a.lab.test /health 200
Sub2API B sub2b.lab.test /health 200

三个域名的健康接口验收结果

10. 登录响应头与安全属性检查

健康接口通过后,再检查登录页响应头。本轮记录中,A 登录页返回 HTTP 200,响应中包含 CSP,以及以下安全响应头:

  • Referrer-Policy: strict-origin-when-cross-origin
  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY

curl -kIsS -H 'Host: sub2a.lab.test:20443' https://127.0.0.1:20443/login | head -n 15

CSP 内容较长,复核时还应结合页面访问情况,确认连接没有降级为 HTTP、页面不会被任意 iframe 嵌入,且浏览器不会对内容类型进行猜测。

A 登录页 HTTP 状态码及安全响应头

11. 首次安全初始化与管理入口约束

HTTPS 验收通过后,再进行管理员初始化。管理员密码、证书私钥、Token 及其他密钥不应写入普通文档,管理操作应从已确认的 HTTPS Host 进入。

如果初始化页面无法打开,先检查网关状态、证书 SAN 和三域名分流,不要通过关闭 TLS 验证来掩盖路由问题。可先重新执行:

docker compose -f compose.yml ps
docker exec lab-gateway nginx -t

12. 故障排查与上线清单

出现证书错误时,先检查证书主题、SAN 和有效期。遇到 502 或空响应,先确认 lab-gateway 是否为 healthy、Nginx 语法检查是否通过,以及 Host 是否填写正确。

如果只有单个应用检查失败,先回查该域名对应的上游,不要同时修改三个路由。

上线前,逐项确认:

  1. lab-gateway 状态为 healthy,监听 20443 端口。
  2. 证书 SAN 覆盖三个实验 Host,本轮记录的证书有效期为 2026-08-25 至 2028-11-27。
  3. nginx -t 返回成功。
  4. Authentik Ready、Sub2API A/B 健康端点均返回 HTTP 200。
  5. A 登录页保留 CSP、Referrer-Policy、nosniff 和 DENY 等安全响应头。
  6. 管理员密码、私钥和 Token 未写入 Markdown、截图或普通日志。

相关阅读:《Sub2API双实例部署与基础验收指南》

相关文章
猜你喜欢