共享密钥容易,共享状态难:一套跨机单点登录的六个坑
把单机登录网关扩成覆盖多子域的 SSO,密钥同步很简单,难的是状态。这篇记录三台机器共用一套网关时踩到的问题:防重放为何变成站内有效跨站无效、密钥的第二份副本如何让 nginx 放行而应用回 401、部署脚本的白名单保留规则怎样静默关掉登录,以及为什么比对凭证不能比生成的口令。
把单机登录网关扩成覆盖多子域的 SSO,密钥同步很简单,难的是状态。这篇记录三台机器共用一套网关时踩到的问题:防重放为何变成站内有效跨站无效、密钥的第二份副本如何让 nginx 放行而应用回 401、部署脚本的白名单保留规则怎样静默关掉登录,以及为什么比对凭证不能比生成的口令。
给自建文件管理器加上双因子网关之后,我问了自己一个问题:这个网关到底挡住了什么。答案是挡住了界面、没挡住文件——同一份字节有两条 URL 可达,而且验证时才发现网关根本不在请求路径上。这篇记录整个自查过程、补洞时踩的两个 nginx 坑,以及源站封掉之后边缘缓存仍然发了近一年。
本机扫端口全是开的,从外面根本连不上——这篇讲为什么本机探测必然错、对照端口为什么不可省,以及一次完整实测:公网 IPv4 不是 CGNAT、80 和 443 被运营商过滤而非未开、IPv6 有真实地址却入站全丢、AAAA 记录为什么不能用回显服务的结果。
有人说某个子域名没有 SSL 证书。查下来证书好好的——一张通配符证书覆盖着它。但排查确实查出了问题,而且更严重:那个子域名的邮箱登录页可以通过明文 HTTP 访问,页面里有密码输入框,没有任何跳转。附两个把我带偏的坑:openssl 对所有目标同时失败时该怀疑工具,以及透明代理下 DNS 枚举完全失效。
依据 RFC 9111 计算共享缓存 MISS、HIT 与 304 revalidation 的时延,并解释缓存 key 和隐私边界。