在不复用旧哈希的情况下迁移 VPN 认证后端
VPN 身份迁移是一次切换,而不是复制:梳理认证链路、迁移试点人群、演练凭据变更,并规划重置也无法撤销的恢复方案。
用户名出现在新目录里,迁移被宣布完成,登录却仍然失败。网关仍然需要一条受支持的认证路径和正确的授权结果,而这两者都不会从一个如今包含这些账号的目录里自动产生。后端迁移是一次带生命周期的切换,而不是复制工作。下面这个症状通常最能揭示两者的差别。
症状:账号存在,会话没有
新目录保存了每一个用户名,测试绑定也能成功,VPN 客户端却仍然返回认证失败。这种组合意味着身份确实存在,但网关使用的验证路径要么到不了它,要么用了它无法满足的方法。两者都是配置问题,而且是不同的问题。
第一种是接线问题:网关指向一个不应答的后端,使用对方并不预期的共享密钥,或者索取新服务不会返回的属性。第二种是密码学问题:该方法需要原始密码,而新存储只保留它的哈希。两种情况下错误文本看起来相似,这也是它们常被当成同一个问题的原因。
在碰账号之前把这两类问题分开,能省下一周时间。一类是路由与信任问题,另一类是重置凭据的决策,混在一起就会产生没人能归因的变更。
在迁移任何人之前先梳理链路
为每个客户端配置写下六件事:外层认证方法、是否存在内层方法、客户端期望的服务器身份、网关与后端之间的接口、网关映射为组成员身份的属性,以及由此产生的资源策略。按顺序读一遍就能看出哪一环没人负责。每一项都有负责人,而切换往往断在没人检查的那一环。
| Link | Question it answers |
|---|---|
| Client profile | Which method and server name does the client use? |
| Inner method | Is there a second authentication step? |
| Server identity | Which certificate or name must the client accept? |
| Gateway to backend | Which protocol, port and shared secret? |
| Attribute mapping | Which returned value becomes group membership? |
| Resource policy | What the resulting session may reach |
一次普通的目录登录几乎不会经过这条链路的任何一环。它只证明账号存在、密码可用,而这恰恰是从未受到怀疑的部分。
哈希不会在方法之间迁移
凭据兼容性必须在任何人群迁移之前一次性核查。FreeRADIUS 清楚地记录了这一区分:由服务器自己执行的 CHAP 校验需要真实密码,而 MS-CHAP 接受该密码或合适的 NT 材料。为其他用途生成的哈希两类都不满足,无论它多强。
区别在于谁来计算证明。通过绑定目录来验证的方法,让目录去检查它能检查的东西。通过重新计算挑战响应来验证的方法,需要密码本身,因为服务器必须执行同样的计算。
在材料缺失的地方,诚实的选择是受支持的重置、重新注册、外部验证服务或更换方法。临时导出可恢复的密码不在这个清单上。它会在项目最混乱的一周里造出一个明文凭据库,而且通常比迁移本身活得更久。
试点人群,然后是生命周期变更
用真实客户端迁移一小批已批准的身份,并测试四件事:全新登录、故意错误的凭据、会话可以访问的资源,以及会话不应访问的资源。还要检查客户端接受的服务器身份,因为证书名称不匹配在有人读取客户端日志之前是看不见的。
然后演练部署真正依赖的变更。修改一个密码、续期或重新注册一张证书,并撤销一个试点账号的访问权。每做一项都要确认是哪个验证器处理了这次尝试,因为切换之前建立的会话可能继续工作,却完全不能说明下一次登录。
把配置文件下发与身份切换分开。每个试点人群都需要预期的配置文件、其凭据或注册状态、应当使用的认证服务以及一名支持联系人,而这些记录都不应包含密钥。
如果新旧路径并存,就用一个截止日期约束它们。自动回退可能在新负责人撤销访问之后,仍让账号通过旧凭据进入,那是一种伪装成可用性的安全退化。
回滚无法恢复凭据
把切换倒回去,目录仍然停留在现在的状态。被重置的密码仍是重置状态,被吊销的证书仍是吊销状态,被更改的凭据格式仍是更改后的格式。这些是目录里的事件,网关从来不是它们的源头。恢复必须按事件分别定义,而且任何一部分都不能依赖从不兼容的哈希里重建密钥。
保留一条不使用被迁移连接的管理路径。当新认证失败时,暂停该人群并使用其成文的恢复路径,而不是为了赶一个期限而削弱所有人的认证。
在人群覆盖完成后,通过各自的负责人退役旧后端的凭据、配置文件和信任关系。确认旧路径不再放行用户,并保留支持团队仍然需要的、不含密钥的身份到策略映射。迁移的完成标准是新生命周期正常工作、再没有人能从旧路径进入,而不是账号列表看起来完整。