在 VPN 端点上安装自定义证书,感觉像是在增加保护,因为证书和加密总是一起出现。实际上它只改变两件事:端点出示哪一种身份,以及它的对端愿意信任哪个签发者。这两者都不会把你的数据再包一层。如果真正的需求是第二条受保护的通道,你需要的是拥有自己端点的第二条通道,而不是再来一张证书。

TLS 1.3 握手里的三项独立工作

RFC 8446 把这几件事分开,而这种分离本身就是全部答案。Certificate 消息携带端点的证书链。CertificateVerify 证明持有匹配的私钥,并绑定握手记录。记录层用协商出的流量密钥保护流量。

换掉证书,前两项就会改变。记录保护不会运行两次,也不会因为签发者变成私有而更强。

私有 CA 究竟买到了什么

它买到一套受控的身份体系:由你决定给谁签发,由你决定对端接受哪些签发者,你还能按自己的时间表吊销。当两端都由你运营时,这确实有用。

但它也带来了义务。信任必须被有意识地分发,对端验证必须保持开启,凭据的生命周期必须有人负责。私有 CA 并不是绕过这三件事的捷径。

什么时候第二条通道才是正确答案

假设某个应用向自己的服务发起经过验证的 HTTPS,同时它的数据包还要经过 VPN。这种设计有两个边界,端点可能并不相同,而第二条受保护的通道正是这个样子。

这个区别在网关处很关键。如果应用的 TLS 会话终止在 VPN 网关而不是应用本身,你以为存在于隧道另一端的那层保护其实并不在那里。在声称拥有该性质之前,先写清每条通道由谁终止。

问清楚安装改变了什么

安装证书的请求可能意味着三件不同的事。它可能是改变客户端自身的身份,可能是应用专属的信任锚,也可能是 对整个设备上所有内容生效的平台级信任。这三者并不等价,只有最后一种会影响无关的软件。

先问是三者中的哪一种,再问它应该达成什么。如果答案是更多加密,那这个提案瞄错了机制。

把边界写下来

对每条通道,记录端点、每一侧验证的身份,以及中间的操作者能看到什么。然后记录失败时的行为:验证失败时会发生什么,通道被拒绝时又会发生什么。

一页纸上的两行,通常就能解决证书轮换解决不了的争论。

用三个问题作决定

问题在于端点声称自己是谁,还是在于数据会怎样?保护是否需要越过 VPN 网关,一直延伸到某个具体应用?你能不能说出终止第二条通道的那两个端点?

如果真正的问题是第一个,那就去修身份与信任。如果是第二或第三个,就设计第二条通道,把证书放回它该在的地方。

相关文章