对于运行 Android 13 或更高版本的设备,Android 支持首次使用信任 (TOFU) 身份验证方法 (RFC7435),该方法允许用户通过安装服务器使用的根 CA 并在已保存的网络中设置其域名来信任企业 (EAP) 网络。TOFU 允许设备在用户首次连接到企业网络时获取未经身份验证的公钥,并将该密钥保留以供后续连接使用。
背景
与仅需要密码的个人网络相比,企业网络使用公钥基础设施 (PKI) 身份验证,这要求客户端预安装证书。在 Android 11 或更低版本中,用户可以在网络设置中为服务器 CA 证书选择不验证选项,从而绕过服务器端证书的验证。但是,为了加强安全性并符合 WPA R2 规范,Android 12 引入了企业网络必须进行服务器证书验证的要求。这项附加要求为用户设置了障碍,因为他们需要为此类网络安装 CA 证书。TOFU 为用户连接到基于 PKI 的企业网络提供了一种方法,用户只需接受其根 CA 即可。
功能行为
当用户连接到没有预安装身份验证公钥的企业网络时,支持 TOFU 的设备会显示以下行为。
通过 Wi-Fi 选择器连接到新网络
在 Wi-Fi 选择器中选择新的企业网络。
设备会显示一个对话框(图 1),以确认网络是否受信任。
点按是,连接以接受网络连接,或点按否,不连接以拒绝。
如果您点按是,连接,设备会自动配置安全参数、连接到网络,并为该网络启用自动连接。
如果您点按否,不连接,设备会断开与网络的连接,并禁用该网络的自动连接。
图 1. TOFU 功能的对话框
连接到已启用自动连接的现有网络
连接到已启用自动连接但没有有效 CA 证书的企业网络时,设备会自动连接,然后显示一个粘性(不可关闭)通知。
点按该通知。
设备会显示一个对话框(图 1),以确认网络是否受信任。
点按是,连接以接受网络连接,或点按否,不连接以拒绝。
如果您点按是,连接,设备会自动配置安全参数、连接到网络,并为该网络启用自动连接。
如果您点按否,不连接,设备会断开与网络的连接,并禁用该网络的自动连接。
实现
为了支持 TOFU 功能,请在 Android 开源项目 (AOSP) 中提供的以下位置实现 supplicant HAL:/hardware/interfaces/wifi/supplicant/aidl/android/hardware/wifi/supplicant
。
以下公共 API 在 Android 13 中可供应用使用
WifiManager#isTrustOnFirstUseSupported()
:指示设备是否支持 TOFU。WifiEnterpriseConfig#enableTrustOnFirstUse(boolean)
:启用 TOFU。WifiEnterpriseConfig#isTrustOnFirstUseEnabled()
:指示是否已启用 TOFU。
验证
要验证您的设备上 TOFU 的实现,请使用以下测试
- CTS:
CtsWifiTestCases
- VTS:
VtsHalWifiSupplicantStaNetworkTargetTest