Record HTTPS gateway deployment and renewal verification

This commit is contained in:
opsx committed 2026-10-22 06:54:16 +08:00
1 parent cb28b235ef
commit 64f1d89a2f
2 files changed
+9 -5

No files matched your search

+2
View File
@@ -68,6 +68,8 @@ Go 模式(默认)使用 `golang.org/x/crypto/acme/autocert` 监听 80/443,
1. 在设置页安装 `nginx`、`certbot`,检查云安全组 TCP 80/443 和域名 A/AAAA 记录;保存公网域名与 Nginx 入口模式,重启 opsx-vpn 使模式生效。页面的“启用站点并申请证书”会核对已有站点和端口冲突,拒绝覆盖非默认站点;发行版默认软链接移至 `/etc/nginx/opsx-vpn-default.disabled`。Go 与 Nginx 不能同时监听 80/443。 1. 在设置页安装 `nginx`、`certbot`,检查云安全组 TCP 80/443 和域名 A/AAAA 记录;保存公网域名与 Nginx 入口模式,重启 opsx-vpn 使模式生效。页面的“启用站点并申请证书”会核对已有站点和端口冲突,拒绝覆盖非默认站点;发行版默认软链接移至 `/etc/nginx/opsx-vpn-default.disabled`。Go 与 Nginx 不能同时监听 80/443。
2. 点击启用操作后,服务生成 HTTP-01 站点并校验 `nginx -t`,使用 `certbot certonly --webroot` 申请证书;失败时页面展示过程与错误,并保留 HTTP 验证站点供重试。Certbot 当前使用无邮箱注册,续签异常不会发送邮件提醒。 2. 点击启用操作后,服务生成 HTTP-01 站点并校验 `nginx -t`,使用 `certbot certonly --webroot` 申请证书;失败时页面展示过程与错误,并保留 HTTP 验证站点供重试。Certbot 当前使用无邮箱注册,续签异常不会发送邮件提醒。
3. 证书签出后程序自动追加 HTTPS 站点、检查配置并重载,同时安装固定续签钩子(`nginx -t` + `systemctl reload nginx`)。确认 Certbot 续签定时器运行,执行 `certbot renew --dry-run` 检查续签;生产验证时再核对 `--run-deploy-hooks` 对钩子的实际效果。证书状态页读取实际的证书到期日;不要仅以站点文件存在判断公网可用。 3. 证书签出后程序自动追加 HTTPS 站点、检查配置并重载,同时安装固定续签钩子(`nginx -t` + `systemctl reload nginx`)。确认 Certbot 续签定时器运行,执行 `certbot renew --dry-run` 检查续签;生产验证时再核对 `--run-deploy-hooks` 对钩子的实际效果。证书状态页读取实际的证书到期日;不要仅以站点文件存在判断公网可用。
2026-10-22 生产实例已启用 `test-link.appx365.com`,证书有效至 2027-01-19,`certbot renew --dry-run --run-deploy-hooks --non-interactive` 模拟续签成功。当前管理服务仍在公网 `:18080` 监听,沿用 HTTP 地址的客户端可绕过 Nginx 的路径白名单;完成客户端地址迁移后,需限制 18080 仅回环访问。模拟续签执行钩子时 `nginx -t` 的正常 stderr 被 Certbot 记录为警告,但退出成功。
4. 页面保存入口模式为 Nginx,启动或重启 opsx-vpn 并设置 `VPN_LISTEN_ADDR=127.0.0.1:18080`;确认 `https://<域名>/api/health`、登录及各业务页面可用,未知路径断开,80 的挑战仍可读,然后收紧 18080 公网安全组。若现有业务必须从公网直连 18080,先迁移这些客户端。 4. 页面保存入口模式为 Nginx,启动或重启 opsx-vpn 并设置 `VPN_LISTEN_ADDR=127.0.0.1:18080`;确认 `https://<域名>/api/health`、登录及各业务页面可用,未知路径断开,80 的挑战仍可读,然后收紧 18080 公网安全组。若现有业务必须从公网直连 18080,先迁移这些客户端。
不要只开放 `/oauth2/callback`:独立的 OIDC 认证域名还要转发认证组件的完整登录流程,且应另为该域名申请证书。管理站点的路由预览不覆盖认证域名;真实认证域名和组件端口确认后单独配置。若代理和 VPN 主机分离,预览里的 `127.0.0.1` 指代理主机自身,应改成受限私网地址并保护传输链路。回退时先恢复原 Nginx 配置及 opsx-vpn 入口模式,运行 `nginx -t` 后重载,不删除 `data/` 或已有证书。 不要只开放 `/oauth2/callback`:独立的 OIDC 认证域名还要转发认证组件的完整登录流程,且应另为该域名申请证书。管理站点的路由预览不覆盖认证域名;真实认证域名和组件端口确认后单独配置。若代理和 VPN 主机分离,预览里的 `127.0.0.1` 指代理主机自身,应改成受限私网地址并保护传输链路。回退时先恢复原 Nginx 配置及 opsx-vpn 入口模式,运行 `nginx -t` 后重载,不删除 `data/` 或已有证书。
+7 -5
View File
@@ -3,7 +3,7 @@
| 字段 | 内容 | | 字段 | 内容 |
|---|---| |---|---|
| 级别 | S3(公网暴露面、系统服务、证书私钥) | | 级别 | S3(公网暴露面、系统服务、证书私钥) |
| 状态 | 已实现入口模式、依赖准备、管理员启用站点与申请证书;2026-10-22 线上已安装 Nginx/Certbot,80/443 待发布验证 | | 状态 | 2026-10-22 已部署:`test-link.appx365.com` 经 Nginx 监听 80/443,Certbot 签发并通过模拟续签;独立 OpenVPN 认证域名仍待接入 |
| 已有实现 | SDD-003 的 Go `autocert` 单域名监听已在本地完成,尚未上线 | | 已有实现 | SDD-003 的 Go `autocert` 单域名监听已在本地完成,尚未上线 |
| 目标 | 管理员从页面设置域名并查看证书;可选地由 Nginx 承担 80/443、HTTP-01 和认证反代,未知管理站点路径直接断开 | | 目标 | 管理员从页面设置域名并查看证书;可选地由 Nginx 承担 80/443、HTTP-01 和认证反代,未知管理站点路径直接断开 |
@@ -26,12 +26,14 @@
| 编号 | 验证 | 预期 | 状态 | | 编号 | 验证 | 预期 | 状态 |
|---|---|---|---| |---|---|---|---|
| NG-01 | 非法 Host、未知管理路径、任意 `/.well-known/` 路径 | 不转发,关闭连接;ACME 路径独立可访问 | 配置单测通过,实机待测 | | NG-01 | 非法 Host、未知管理路径、任意 `/.well-known/` 路径 | 不转发,关闭连接;ACME 路径独立可访问 | 已实测未知 `/.well-known/openid-configuration` 和 HTTP `/settings` 断连、ACME 缺失令牌返回 404;非法 Host 待测 |
| NG-02 | 登录、MFA、SPA 深链接、管理 API 和静态资源 | 正常访问,仍由平台做身份与权限校验 | 待测 | | NG-02 | 登录、MFA、SPA 深链接、管理 API 和静态资源 | 正常访问,仍由平台做身份与权限校验 | 已实测 HTTPS 登录页、`/settings`、`/tunnels`、JS/CSS 静态资源、健康检查和管理员证书状态接口;MFA 待测 |
| NG-03 | 认证域名打开登录、回调和认证组件所需路径 | 全流程可达,组件只监听回环 | 待真实认证域名与组件 | | NG-03 | 认证域名打开登录、回调和认证组件所需路径 | 全流程可达,组件只监听回环 | 待真实认证域名与组件 |
| NG-04 | 首次签发与续期 dry-run | 证书有效、续期后 Nginx 重载 | 待服务器安装与部署 | | NG-04 | 首次签发与续期 dry-run | 证书有效、续期后 Nginx 重载 | 2026-10-22 首次签发成功,到期日 2027-01-19;模拟续签成功,deploy hook 执行、Nginx 保持 active(证书验证 stderr 在 Certbot 日志显示为非致命警告) |
| NG-05 | Ubuntu / TencentOS 4 首次引导 | 匹配各自包管理器、实时显示输出、并发重复请求拒绝;不覆盖已有站点 | 方案与并发单测通过,实机安装待测 | | NG-05 | Ubuntu / TencentOS 4 首次引导 | 匹配各自包管理器、实时显示输出、并发重复请求拒绝;不覆盖已有站点 | Ubuntu 24.04 实机安装完成;TencentOS 4 仅单测 |
## 边界 ## 边界
`return 444` 是 Nginx 的断连响应,不是权限控制;合法接口仍必须由 Gin 鉴权。Go `autocert` 模式不会提供 `return 444`。不能用路径白名单阻断 ACME 续期、MFA 或 WebAuth。认证域名与管理域名若合并,需要重新设计路径分发及 Cookie 隔离,不能直接套用独立域名配置。认证域名接入仍待独立域名和真实发行者信息;Certbot 续签 dry-run 与公网联调以实际执行记录为准。 `return 444` 是 Nginx 的断连响应,不是权限控制;合法接口仍必须由 Gin 鉴权。Go `autocert` 模式不会提供 `return 444`。不能用路径白名单阻断 ACME 续期、MFA 或 WebAuth。认证域名与管理域名若合并,需要重新设计路径分发及 Cookie 隔离,不能直接套用独立域名配置。认证域名接入仍待独立域名和真实发行者信息;Certbot 续签 dry-run 与公网联调以实际执行记录为准。
当前 `:18080` 仍监听公网,旧客户端以 HTTP 直连会绕过 Nginx 的 444 白名单;迁移客户端服务地址至 HTTPS 后应单独收紧 18080。2026-10-22 本机对域名的第二轮公网探测出现连接重置/DNS 波动,服务器回环直连 HTTPS `/settings` 和管理健康检查正常;持续公网可用性需结合实际用户网络观察。