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

Authentik HTTPS发布与反向代理验证

浏览:25

本文以隔离测试环境中的 Authentik 2026.8.0 和 Nginx 网关为例,介绍 HTTPS 发布、证书检查、反向代理配置及外部访问验证流程,确保应用能够正确识别 Host 与 scheme,并正常返回认证流程页面。文中不展示密码、Token、TOTP 种子、Client Secret 及真实基础设施地址等敏感信息。

1. 实施目标与验收口径

本篇处理已运行 Authentik 的 HTTPS 发布,不涉及数据库初始化或身份源创建。验收分为容器健康、证书链和反向代理三层;全部通过后,外部 Base URL 才可交给 OIDC 等上游使用。

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

网关与 Authentik 容器均为 healthy,认证就绪接口返回 200。

 2. 环境版本与域名规划

本次环境使用 ghcr.io/goauthentik/server:2026.8.0,网关监听回环地址的 20443 端口。证书覆盖 auth.lab.test、sub2a.lab.test 和 sub2b.lab.test,网关按 Host 分流,各服务保持独立域名。

docker inspect authentik-lab-server-1 --format '{{.Config.Image}}'
ss -lntp | grep ':20443'

3. 上线前检查

先确认网关、Authentik server 和 worker 运行,再检查外部路径。服务未健康时不要修改 OIDC 回调地址,以免混淆启动、证书和代理问题。

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

4. 证书链与 SAN 检查

网关使用 lab-server.crt 和 lab-server.key。先由 CA 验证证书,再检查 SAN,不要只看 CN。当前证书由 Codex Lab Root CA 签发,验证结果为 OK,SAN 精确覆盖三个实验域名。

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

CA 验证通过,SAN 包含 auth、sub2a 和 sub2b 三个实验域名

5. Nginx HTTPS 监听配置

虚拟主机 auth.lab.test 监听 20443,请求转发至 Authentik 9443 HTTPS 上游。证书只读挂载到网关,配置纳入变更审计。

server {
    listen 20443 ssl;
    server_name auth.lab.test;
    ssl_certificate /etc/nginx/certs/lab-server.crt;
    ssl_certificate_key /etc/nginx/certs/lab-server.key;
    location / {
        proxy_ssl_verify off;
        proxy_pass https://authentik-lab-server-1:9443;
    }
}

测试环境的上游证书由实验 CA 签发,因此现有配置关闭了 Nginx 到上游的证书校验。生产环境应把 CA 链正确挂载到网关,再开启上游校验,不能把 proxy_ssl_verify off 当作长期安全方案。

实配置显示 auth 虚拟主机的证书路径和 Authentik 9443 上游。

6. Authentik 外部 Base URL

server 与 worker 必须使用同一外部地址:https://auth.lab.test:20443。遗漏 worker 可能使后台任务生成 HTTP 链接或回调地址不一致。

docker inspect authentik-lab-server-1 authentik-lab-worker-1 \
  --format '{{.Name}} {{range .Config.Env}}{{if eq . "AUTHENTIK_WEB__BASE_URL=https://auth.lab.test:20443"}}{{.}}{{end}}{{end}}'

server 与 worker 同时注入相同的外部 Base UR

7. 代理头与上游 TLS

代理传递原始 Host、外部端口和 HTTPS。网关使用 X-Forwarded-Proto https、X-Forwarded-Host、X-Forwarded-Port,并保留 WebSocket 所需的 HTTP/1.1 Upgrade 头。修改后先语法检查,再重载容器。

docker exec lab-gateway nginx -t
docker compose -f /opt/lab-gateway/compose.yml up -d

8. 认证流程访问验证

通过外部 Host 请求默认认证流程,应返回 HTML,而非 301 循环、502 或内部地址跳转;实测 HTTP 200,约 6 KB。

curl -ksS --max-time 20 \
  -H 'Host: auth.lab.test:20443' \
  -o /dev/null \
  -w 'status=%{http_code} bytes=%{size_download}\n' \
  'https://127.0.0.1:20443/if/flow/default-authentication-flow/'

默认认证流程通过 HTTPS 返回 200,并带有安全响应头

9. 安全响应头验证

认证页面至少检查 X-Frame-Options、X-Content-Type-Options 和 Referrer Policy。当前响应包含 DENY、nosniff 和 same-origin。生产环境还应结合统一安全基线审查 HSTS、Cookie 属性和 CSP 是否由上层策略统一管理。

curl -kIsS --max-time 20 \
  -H 'Host: auth.lab.test:20443' \
  https://127.0.0.1:20443/if/flow/default-authentication-flow/ \
  | grep -Ei 'HTTP/|content-type|x-frame|x-content|referrer|strict-transport|server'

10. Authentik 日志回归

Nginx 返回 200 不能证明代理头正确。查看 Authentik ASGI 日志,确认 Host 为 auth.lab.test:20443 且 scheme 为 https。如果日志仍显示 HTTP,优先检查 X-Forwarded-Proto、外部 Base URL 和代理信任配置。

docker compose -f /opt/authentik-lab/compose.yml logs --since 30m server 2>&1 \
  | grep 'auth.lab.test:20443' \
  | grep '"scheme": "https"' \
 | tail -n 5

Authentik 日志同时记录外部 Host、HTTPS scheme 和成功状态

11. 常见故障排查

502 时先查网关是否加入 Authentik 网络、上游 9443 监听及容器 DNS;证书错误核对 SAN 与访问 Host;重定向循环核对 Base URL 与转发协议;回调为 HTTP 则确认 server、worker 配置一致。每次只改一个变量,再执行第 8 至第 10 节。

docker inspect lab-gateway --format '{{json .NetworkSettings.Networks}}'
docker exec lab-gateway getent hosts authentik-lab-server-1
docker compose -f /opt/authentik-lab/compose.yml logs --since 10m server worker

12. 上线检查清单

容器状态为 healthy,认证就绪接口返回 200。

  • 证书由预期 CA 签发,SAN 与外部 Host 完全匹配。
  • Nginx 仅发布需要的监听端口,证书和配置以只读方式挂载。
  • server 与 worker 的 AUTHENTIK_WEB__BASE_URL 完全一致。
  • 默认认证流程返回 200,无 HTTP/HTTPS 重定向循环。
  • 安全响应头符合组织基线,日志中的 Host 与 scheme 正确。
  • 生产环境完成上游 TLS 校验、DNS、证书续期和回滚演练。
  • 本次验证证明 HTTPS 网关、外部地址和代理头协同工作。接入 OIDC 前,替换实验域名、证书和端口,重新完整验收;不得复用实验密钥或 CA。

相关阅读:

《Authentik部署与首次启动检查教程》

《Authentik单点登陆搭建教程》

相关文章
猜你喜欢