手机每天早上无需询问任何东西就能重新连接到 VPN。这意味着凭据就在其中的某个地方。通常并非如此,至少不是你能读出来再输入到新设备里的形式。

手机拥有的是连接权限。你想要的是可以带走的机密,而这是两种不同的属性,只是恰好产生了相同的屏幕表现。

在重置任何东西之前,先确定四种机密中究竟缺少哪一种,因为每一种都有不同的所有者和不同的恢复方式。

能用的连接不等于保存的密码

一个静默重连的应用可能持有密码、会话令牌、证书引用,或者只是一把无法导出的设备绑定密钥。四者带来相同的用户体验,但没有一种可以互换。

设置栏里的一行圆点是渲染选择,不是证据。有些应用确实保存可恢复的密码,并提供显示或导出;另一些从单点登录流程取得令牌,根本看不到密码。

所以第一个问题不是文件在哪里。而是应用被授予了哪种权限,而这个答案来自服务提供方,不是设备。

四种机密,四种恢复

在联系任何人之前,先把你的情况对应到一行,因为请求会因是哪一种而完全不同。

What is missingWho can restore it
Account password used with a usernameThe identity provider, through a reset
Password protecting a private key or PKCS#12 packageNobody, if it is forgotten; a fresh profile and key are issued instead
Session token or SSO sessionNobody; sign in again to obtain a new session
Reference to a certificate or key held on the deviceThe administrator, by enrolling the new device

第二行最常让人中招。PKCS#12 导入密码保护密钥材料,与账户登录无关,所以重置账户密码什么也恢复不了。如果包密码确实丢失,解决办法是重新签发。

第四行解释了许多令人困惑的支持帖。配置文件可能引用平台密钥库中的凭据,而不是包含可移植副本,在这种情况下,配置文件里原则上也没有任何可提取的东西。

为什么复制应用数据通常行不通

旧办法是把应用的数据目录拉出来,再从中读取配置。在当前的 Android 上,这个办法有两个彼此独立的问题。

第一个是备份策略。Android 12 限制了面向 API 31 或更高版本的应用通过旧的 adb backup 路径导出的应用数据,而且应用可以完全将数据排除在备份之外。为旧设备写的步骤并非当前设备的通用恢复方法。

第二个是密钥库。在那里生成的密钥可能不可导出,并且与硬件绑定,Android Keystore 文档对此有说明。复制加密数据块并不会复制解密它的密钥,所以恢复出来的目录里可能含有新设备永远无法使用的凭据。

这两个问题都不是需要绕过的缺陷。两者都是平台按设计行事,把它们当作障碍,通常以手机被 root 而密码仍未找回告终。

有意识地换到替换手机

先做受支持的事。如果提供方提供的导出明确包含你需要的凭据,就用它,并在抹掉旧设备之前先在新设备上验证结果。如果没有,就申请新的配置文件或注册,这是基于证书的服务的常规路径,通常比绕路花的时间更少。

顺序很重要。注册替换设备、连上它、通过隧道发一个测试请求,然后才让原设备退役。在新设备被证明可用之前保留那台能用的手机,是现有最便宜的保险,代价只是耐心。

也要为重置的副作用做计划。如果账户密码被重置或设备身份被吊销,其他会话可能失效,包括笔记本客户端和一台谁也没想起的平板。要在同一个时间窗口里处理,而不是一个个发现。

不要做的事

不要为了找明文文件而 root 唯一能用的设备。你把访问恢复问题变成了设备完整性问题,可能破坏应用自身的完整性检查,而且仍然无法保证你找的值以可读形式存在。

不要把私钥、导出的配置文件或密码贴进支持工单来证明问题真实存在。提供方需要的是配置文件名称、应用版本、账户标识和错误信息,这些都不是机密。

也不要在等待时为了获得连接而关闭证书校验。那是用暂时的麻烦,换取唯一能告诉你正在与哪台服务器通信的检查被永久削弱。记录四个事实,提出具体问题,走正式渠道。

相关文章