VPN 门户安装程序:安装包、配置文件还是重新构建?
门户下载可能是供应商签名的安装程序、仅含配置文件的捆绑包,或内部重新构建。部署前请核对发布者、内容与更新负责人。
VPN 门户的下载按钮只返回一个文件,而这个文件可能是两种截然不同的东西:随附配置文件的供应商现成安装程序,或是组织自行编译的构建。无论哪种,页面看起来都一样,所以按钮无法告诉你拿到的是哪一种。它背后有三个问题——谁发布了可执行文件、安装会写入什么配置,以及下一个客户端版本到来时由谁修复。第一个问题从产物元数据回答,第二个从包内容回答,第三个只能由负责部署的团队回答。
浏览器挂锁保护的是 传输,而非产物本身。
下载端点实际返回什么
大多数门户把下载请求交给一个小型处理器:它要么流式传输已存储的文件,要么即时组装一个文件,然后在响应发出前设置文件名和内容类型。到达的是一个容器:MSI、PKG、DEB 或 RPM,或包裹其中之一的自我解压外壳。里面是客户端二进制文件,而文件名无法可靠说明该二进制来自供应商还是内部构建流水线。名为 client-setup.exe 的文件记录的是一项命名决定,而非来源事实。
将下载的字节与供应商公布的校验和进行比较。不一致并不证明恶意;它证明该文件不是供应商构建,而这正是值得据以行动的差别。
配置文件在哪里进入客户端
预填设置通常以单独文件的形式传递,安装程序会把它复制到每用户或每台机器的路径中:Windows 上的 JSON 或 XML 配置文件、macOS 上的配置描述文件、Linux 上 /etc /etc 之下的片段。该文件中的值——网关主机名、信任锚,有时还有注册材料——会在首次启动时成为客户端的默认值。这就是为什么一次下载既能携带代码,也能携带机密。
要问升级路径会如何处理该配置文件。视打包方式而定,它可能经受住客户端更新、被更新覆盖,或在新版本中无法通过架构校验。
签名链不能证明什么
代码签名把发布者身份绑定到文件哈希,而在 Windows 上,Authenticode 时间戳让签名比创建它的证书存活更久。有效结果回答两个问题:是哪个发布者签署了这些字节,以及之后它们是否发生变化。它不会列举安装程序的服务、注册表写入或随附驱动,也不会决定是否应在此信任该发布者。Microsoft 的 Authenticode 文档 描述了该机制,并明确说明了这一狭窄范围。
门户身份验证回答第三个问题:会话是否到达了预期的服务器。三项不同的检查,三种不同的失败方式。
在任何人运行之前验证产物
把文件放到隔离机器上,在执行任何操作前读取其元数据。这些命令在三大主流平台上回答发布者问题。
# Windows PowerShell Get-AuthenticodeSignature .\client-setup.exe | Format-List Status, SignerCertificate, TimeStamperCertificate # macOS pkgutil --check-signature ./Client.pkg codesign -dv --verbose=4 /Applications/Client.app # Debian/Ubuntu dpkg-deb -I ./client_amd64.deb sha256sum ./client_amd64.deb
要读签名者的主体,而不只是状态字样。内部证书颁发机构为内部构建签名是预期之中的;同样的证书出现在自称供应商发行的包上则不是。
对于仅含配置文件的包,打开归档,把其中嵌入的每个主机名和密钥都当作必须交代的数据。如果配置文件含有任何可复用的内容,门户分发就会把它变成带有推广时间表的共享机密。
在部署前确定归属
最后一个问题背后没有命令。弄清楚:供应商发布新客户端时谁更新产物、谁持有内部构建的签名密钥,以及端点迁移时配置文件如何轮换。把这些名字写在下载链接旁边。
如果没有人拥有这个答案,这次下载就是一个没有维护合同的发布渠道,而这正是值得报告的发现。