额外的根证书会影响哪些校验器?
一个恶意根、VPN 的私有 CA 设置和一个固定指纹,会到达不同的校验器。先把每一个映射清楚,再把能用的隧道当作清白证明。
你发现了一张本不该存在的根证书,第一个问题是它能冒充谁的身份。诚实的答案取决于哪些软件会查询那个存储,以及你的 VPN 如何验证自己的网关。浏览器、包管理器和使用固定指纹的 VPN 客户端,未必共享同一个信任决定。先映射校验器,再决定范围。
系统存储里的根并不是万能钥匙
安装根证书会使由该密钥签发的证书被使用该存储的程序接受。它并不会自动让这些证书到处都被接受,因为有些应用自带证书包,或校验一个固定值。它也不能证明有人在这台机器上执行过代码;信任变更只是若干能力之一。把这张证书看成一个需要划定范围的发现,而不是整个事件。
存储和证书同样重要:用户级证书包与系统级锚点到达的是不同的使用者。
映射每个校验器及其信任来源
写下受影响的流程中每一个校验证书的组件:浏览器、包管理器、邮件客户端、VPN。然后找出它们各自读取的信任来源。
ls /usr/local/share/ca-certificates
trust list | grep -i -E "vpn|corp"目录列表显示 Debian 系系统上本地添加的锚点,信任列表则显示系统存储当前暴露的内容。自带存储的浏览器不会出现在那里,Java 或 Python 应用可能还用另一个证书包。记录哪些条目是预期的、哪些不是,依据指纹而不是仅凭显示名称。这份清单正是事件响应者在删除任何东西之前所需要的。
检查 VPN 自己的对端校验
使用私有 CA或显式指纹的 VPN 会依据自身配置评估网关。请把客户端期待的内容与网关实际呈现的内容做对比。
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com -showcerts </dev/null 2>/dev/null | openssl x509 -noout -fingerprint -sha256 -subject输出给出端点所呈现证书的 SHA-256 指纹和主题,你可以与配置值进行对比。OpenVPN 的对端指纹选项会为隧道完成这一比较,而无需系统存储接受签名者。这种独立性对隧道有用,但对浏览器什么也说明不了。如果期望的指纹一开始就是从可疑连接复制来的,它也帮不上忙。
把事件范围划定到证书之外
按设备所有者的流程移除未授权的锚点,并查找通常与之相伴的改动:新服务、被修改的客户端、被改动的代理设置。在受管机器上,删除其他软件依赖的材料之前,先确认合法配置。对每个校验器,记录其信任来自何处、期待哪个身份,以及你如何确认当前配置是正确的。清理后隧道能用,只是一个观察,而不是端点干净的证明。
然后重新测试使用过该存储的流程,因为移除锚点可能破坏一个合法依赖它的内部服务。当预期的信任关系正常工作、非预期的关系不再工作时,恢复才算完成。