调试 VPN 不需要私钥
导出配置不是诊断。状态输出会显示对端、握手和版本,从不包含标识你设备的私钥。
这个请求听起来合理:把配置发过来,让支持人员看看哪里出了问题。私钥也正是这样流进工单系统和聊天记录的。配置是身份,不是诊断;调试你隧道的人几乎从不需要能证明“你就是你”的那一半。状态输出能在没有这项风险的情况下回答同样的问题。
迷思在于:配置是唯一完整的视图。它其实是最不安全的完整视图。
迷思:支持人员需要配置
支持人员需要的是错误文本、客户端与服务端版本、端点、握手状态以及事件顺序。这些都是状态。配置会额外带上密钥,而密钥正是让别人能冒充你的东西。为排查路由问题而交出配置,就像为了解释航班延误把护照寄过去。提出请求的人往往从没见过你的网络,只是索要最容易附上的那份东西。
只发能回答那个问题的最小输出,不要发你能找到的最大一份。
状态输出究竟显示什么
WireGuard 的 wg show 会打印接口、对端、允许的 IP、端点、最近一次握手和流量计数,而不打印私钥。OpenVPN 的状态和日志输出给出连接状态与错误,且不含内嵌密钥块。两者都足以判断握手是否完成、计数是否变化、在用哪个对端,wg 手册正是把这类信息记为状态视图。
如果对方在索要状态输出之前先要配置,就问一句:配置能显示哪些状态显示不出来的东西。
各种格式里秘密藏在哪儿
WireGuard 配置文件里有 PrivateKey 行,而对端公钥和端点元数据即使没有私钥也仍具识别性。OpenVPN 配置文件可能内嵌 <key> 与 <tls-crypt> 块,或指向随配置一起流转的独立文件。客户端的支持归档里可能有比日志窗口多得多的东西,包括你早已忘记存在的缓存配置。截图是另一种常见泄露,因为终端窗口显示的常常多于你本来想分享的那条命令。
先读导出文档,再打开文件。标着“诊断”的输出未必清理过任何内容。
先遮蔽,再发一份复核过的副本
把原件放在受保护的位置,只发复核过的副本。真实值不需要时就换成稳定的占位符;私钥块要整段删除,而不是部分遮盖。对 base64 块做部分遮盖仍然等于泄露了密钥。文件发出前再读一遍,因为归档里常带着同一份配置的第二份副本。
使用可验证的渠道,并在附上任何东西之前确认收件人是谁。
如果密钥已经泄露
删除消息并不能收回别人已经拿到的副本。通过运营方的吊销与更换流程轮换身份,并从发送那一刻起把旧密钥视为已失陷。多数运营方在收到泄露报告后会很快更换客户端身份,而被拖延的恰恰是“报告”这一步。
同一条规则也适用于粘贴在工单、截图或聊天串里的密钥。修复靠轮换,删除只是收拾。