Google 致力于为黑人社区推动种族平等。查看具体举措

Passpoint(热点 2.0)

Passpoint 是一种 Wi-Fi 联盟 (WFA) 协议,可让移动设备发现提供互联网访问权限的 Wi-Fi 热点并完成身份验证。

设备支持

为了支持 Passpoint,设备制造商需要实现 hardware/interfaces/wifi/supplicant/1.0 或更高版本。Android 开源项目 (AOSP) 中提供的 Wi-Fi HAL 接口设计语言 (HIDL) 为请求方定义了一个 HAL。请求方支持 802.11u 标准,特别是网络发现和选择功能,例如通用通告服务 (GAS) 和接入网络查询协议 (ANQP)。

实现

Android 11 或更高版本

若要在搭载 Android 11 或更高版本的设备上支持 Passpoint,设备制造商需要提供对 802.11u 的固件支持。支持 Passpoint 的所有其他要求都包含在 AOSP 中。

Android 10 或更低版本

对于搭载 Android 10 或更低版本的设备,设备制造商需要同时提供框架和 HAL/固件支持:

  • 框架:启用 Passpoint(需要功能标志)
  • 固件:支持 802.11u

如需支持 Passpoint,请实现 Wi-Fi HAL 并为 Passpoint 启用功能标记。在位于 device/<oem>/<device>device.mk 中,修改 PRODUCT_COPY_FILES 环境变量,以便支持 Passpoint 功能:

PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml

支持 Passpoint 的所有其他要求都包含在 AOSP 中。

验证

要验证 Passpoint 功能的实现情况,请使用 Android 通讯测试套件 (ACTS) 中提供的一组单元测试和集成测试。

单元测试

运行以下 Passpoint 软件包单元测试。

服务测试:

% ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh -e package
com.android.server.wifi.hotspot2

Manager 测试:

% ./frameworks/base/wifi/tests/runtests.sh -e package android.net.wifi.hotspot2

集成测试 (ACTS)

ACTS Passpoint 测试套件(位于 tools/test/connectivity/acts/tests/google/wifi/WifiPasspointTest.py)可实现一组功能测试。

Passpoint R1 配置

自从 Android 6.0 支持从网络下载包含配置文件和凭据信息的特殊文件来配置 Passpoint R1(第 1 版)凭据,Android 就一直支持 Passpoint R1。客户端会自动启动用于 WLAN 信息的特殊安装程序,并允许用户先查看各部分信息,然后再决定接受或拒绝内容。

文件中包含的配置文件信息用于与从已启用 Passpoint 的接入点检索到的数据进行匹配,并且系统会自动将凭据应用于任何匹配的网络。

Android 参考实现支持 EAP-TTLS、EAP-TLS、EAP-SIM、EAP-AKA 和 EAP-AKA'。

下载机制

Passpoint 配置文件必须托管在网络服务器上,并且应使用 TLS (HTTPS) 进行保护,因为其中可能包含明文密码或私钥数据。内容由经过封装的多部分 MIME 文本(以 UTF-8 表示)组成,并按照 RFC-2045 第 6.8 节所述以 base64 编码形式进行编码。

客户端使用以下 HTTP 标头字段在设备上自动启动 Wi-Fi 安装程序:

  • Content-Type 必须设置为 application/x-wifi-config
  • Content-Transfer-Encoding 必须设置为 base64
  • 不得设置 Content-Disposition

用于检索文件的 HTTP 方法必须为 GET。只要浏览器中的 HTTP GET 收到包含以上 MIME 标头的响应,系统就会启动安装应用。必须通过点按按钮等 HTML 元素来触发下载(不支持自动重定向到下载网址)。此行为仅适用于 Google Chrome;其他网络浏览器不一定会提供类似功能。

文件组成

以 Base64 编码的内容必须由 Content-Typemultipart/mixed 的 MIME 多部分内容组成。以下部分构成了多部分内容的各个部分。

部分 内容类型(较少引用) 是否必需 说明
配置文件 application/x-passpoint-profile 始终必需 采用 OMA-DM SyncML 格式的负载,包含用于 HomeSPCredential 且采用 Passpoint R1 PerProviderSubscription 格式的 MO。
信任证书 application/x-x509-ca-cert 对于 EAP-TLS 和 EAP-TTLS 是必需的 一个以 base64 编码的 X.509v3 证书负载。
EAP-TLS 密钥 application/x-pkcs12 对于 EAP-TLS 是必需的 以 base64 编码的 PKCS #12 ASN.1 结构,包含一个客户端证书链,其中至少具有客户端证书和关联私钥。PKCS 12 容器以及私钥和证书必须都是明文,没有密码。

“配置文件”部分必须以 base64 编码、UTF-8 编码的 XML 文本形式进行传输,这些文本会指定 Passpoint R2 技术规范版本 1.0.0 第 9.1 节中 HomeSPCredential 子树的部分。

顶级节点必须是 MgmtTree,而直接子节点必须是 PerProviderSubscription示例配置文件 OMA-DM XML 中显示了一个示例 XML 文件。

以下子树节点在 HomeSP 下使用:

  • FriendlyName:必须设置;用作显示文本
  • FQDN:必需
  • RoamingConsortiumOI

以下子树节点在 Credential 下使用:

  • Realm:必须为非空字符串
  • UsernamePassword:对于具有以下节点集的 EAP-TTLS 是必需的:

    • Username:包含用户名的字符串
    • Password:以 Base64 编码的字符串(在下面的示例中,以 base64 编码的“password”字符串设置为 cGFzc3dvcmQ=
    • EAPMethod/EAPType:必须设置为 21
    • EAPMethod/InnerMethod:必须设置为 PAPCHAPMS-CHAPMS-CHAP-V2 中的一个
  • DigitalCertificate:对于 EAP-TLS 是必需的。必须设置以下节点:

    • CertificateType 设置为 x509v3
    • CertSHA256Fingerprint 设置为 EAP-TLS 密钥 MIME 部分中客户端证书的正确 SHA-256 摘要
  • SIM:对于 EAP-SIM、EAP-AKA 和 EAP-AKA' 是必需的。EAPType 字段必须设置为适当的 EAP 类型,而 IMSI 必须与进行配置时设备中已安装的 SIM 卡之一的 IMSI 相匹配。IMSI 字符串可以完全由十进制数字组成以强制执行完全对等匹配,也可以包含零个或更多个十进制数字,后跟星号 (*) 以将 IMSI 匹配要求放宽为仅匹配前缀。例如,IMSI 字符串 123* 将匹配 IMSI 以 123 开头的任何 SIM 卡。

Android 11 引入了一些功能,旨在使 Passpoint R1 配置更加灵活。

单独的身份验证、授权和记帐 (AAA) 域名

如果 Passpoint 网络管理员需要指定 AAA 域名,并且该域名独立于网络通过接入网络查询协议 (ANQP) 广播的完全限定域名 (FQDN),那么该管理员可以在 Extension 子树下的新节点中指定以英文分号分隔的 FQDN 列表。这是一个可选节点,搭载 Android 10 或更低版本的设备会忽略此节点。

  • Android:Android 扩展子树

    • AAAServerTrustedNames:对于具有以下节点集的 AAA 服务器可信名称是必需的:

      • FQDN:包含 AAA 服务器可信名称的字符串。使用英文分号分隔可信名称。例如 example.org;example.com
自签名的私人根 CA
在内部管理证书的 Passpoint 网络管理员可以配置采用私人自签名 CA 进行 AAA 身份验证的配置文件。
允许安装没有根 CA 证书的配置文件
附加到配置文件的根 CA 证书用于 AAA 服务器身份验证。想依靠受信任的公共根 CA 进行 AAA 服务器身份验证的 Passpoint 网络管理员可以配置没有根 CA 证书的配置文件。在这种情况下,系统会根据安装在信任库中的公共根 CA 证书验证 AAA 服务器证书。

Passpoint R2 配置

Android 10 引入了对 Passpoint R2 功能的支持。Passpoint R2 实现了在线注册 (OSU),这是一种配置新的 Passpoint 配置文件的标准方法。Android 10 及更高版本支持使用 SOAP-XML 协议通过开放 OSU ESS 配置 EAP-TTLS 配置文件。

支持的 Passpoint R2 功能仅需要 AOSP 参考代码(无需额外的驱动程序或固件支持)。AOSP 参考代码还包括“设置”应用中 Passpoint R2 界面的默认实现。

当 Android 检测到 Passpoint R2 接入点时,Android 框架会:

  1. 在 Wi-Fi 选择器中显示 AP 广播的服务提供商列表(除了显示 SSID 之外)。
  2. 提示用户点按其中一个服务提供商以设置 Passpoint 配置文件。
  3. 引导用户完成 Passpoint 配置文件设置流程。
  4. 成功完成后,安装生成的 Passpoint 配置文件。
  5. 使用新配置的 Passpoint 配置文件关联到 Passpoint 网络。

其他 Passpoint 功能

Android 11 引入了以下 Passpoint 功能,用于提升用户体验、减少耗电量和提高部署灵活性。

失效日期强制执行和通知
对配置文件强制执行失效日期可让框架避免使用过期凭据自动连接到接入点,该操作必定会失败。这样可以阻止无线连接,并节省电量和后端带宽。当与用户的配置文件匹配的网络位于范围内但该配置文件已过期时,框架会向用户显示通知。
具有相同 FQDN 的多个配置文件
部署 Passpoint 网络并使用多个公共陆地移动网络 (PLMN) ID 的运营商可以配置具有相同 FQDN 的多个 Passpoint 配置文件(每个 PLMN ID 对应一个),该配置文件会自动与已安装的 SIM 卡匹配并用于连接到网络。

OMA-DM PerProviderSubscription-MO XML 配置文件示例

具有用户名/密码凭据 (EAP-TTLS) 的配置文件

以下示例演示了具有以下特征的网络的配置文件:

  • 好记的网络名称设为 Example Network
  • FQDN 设为 hotspot.example.net
  • 漫游联盟 OI(针对漫游)
  • 用户名为 user、密码为 password(使用 Base64 编码)且 Realm 设为 example.net 的凭据
  • EAP 方法设置为 21 (EAP-TTLS)
  • 第 2 阶段内部方法设为 MS-CHAP-V2
  • 备用 AAA 域名设为 trusted.comtrusted.net
<MgmtTree xmlns="syncml:dmddf1.2">
  <VerDTD>1.2</VerDTD>
  <Node>
    <NodeName>PerProviderSubscription</NodeName>
    <RTProperties>
      <Type>
        <DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
      </Type>
    </RTProperties>
    <Node>
      <NodeName>i001</NodeName>
      <Node>
        <NodeName>HomeSP</NodeName>
        <Node>
          <NodeName>FriendlyName</NodeName>
          <Value>Example Network</Value>
        </Node>
        <Node>
          <NodeName>FQDN</NodeName>
          <Value>hotspot.example.net</Value>
        </Node>
        <Node>
          <NodeName>RoamingConsortiumOI</NodeName>
          <Value>112233,445566</Value>
        </Node>
      </Node>
      <Node>
        <NodeName>Credential</NodeName>
        <Node>
          <NodeName>Realm</NodeName>
          <Value>example.net</Value>
        </Node>
        <Node>
          <NodeName>UsernamePassword</NodeName>
          <Node>
            <NodeName>Username</NodeName>
            <Value>user</Value>
          </Node>
          <Node>
            <NodeName>Password</NodeName>
            <Value>cGFzc3dvcmQ=</Value>
          </Node>
          <Node>
            <NodeName>EAPMethod</NodeName>
            <Node>
              <NodeName>EAPType</NodeName>
              <Value>21</Value>
            </Node>
            <Node>
              <NodeName>InnerMethod</NodeName>
              <Value>MS-CHAP-V2</Value>
            </Node>
          </Node>
        </Node>
      </Node>
      <Node>
        <NodeName>Extension</NodeName>
        <Node>
            <NodeName>Android</NodeName>
            <Node>
                <NodeName>AAAServerTrustedNames</NodeName>
                <Node>
                    <NodeName>FQDN</NodeName>
                    <Value>trusted.com;trusted.net</Value>
                </Node>
            </Node>
        </Node>
      </Node>
    </Node>
  </Node>
</MgmtTree>

具有数字证书凭据 (EAP-TLS) 的配置文件

以下示例演示了具有以下特征的网络的配置文件:

  • 好记的网络名称设为 GlobalRoaming
  • FQDN 设为 globalroaming.net
  • 漫游联盟 OI(针对漫游)
  • Realm 设为 users.globalroaming.net
  • 具有包含指定指纹的数字证书的凭据
<MgmtTree xmlns="syncml:dmddf1.2">
  <VerDTD>1.2</VerDTD>
  <Node>
    <NodeName>PerProviderSubscription</NodeName>
    <RTProperties>
      <Type>
        <DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
      </Type>
    </RTProperties>
    <Node>
      <NodeName>i001</NodeName>
      <Node>
        <NodeName>HomeSP</NodeName>
        <Node>
          <NodeName>FriendlyName</NodeName>
          <Value>GlobalRoaming</Value>
        </Node>
        <Node>
          <NodeName>FQDN</NodeName>
          <Value>globalroaming.net</Value>
        </Node>
        <Node>
          <NodeName>RoamingConsortiumOI</NodeName>
          <Value>FFEEDDCC0,FFEEDDCC1,009999,008888</Value>
        </Node>
      </Node>
      <Node>
        <NodeName>Credential</NodeName>
        <Node>
          <NodeName>Realm</NodeName>
          <Value>users.globalroaming.net</Value>
        </Node>
        <Node>
          <NodeName>DigitalCertificate</NodeName>
          <Node>
            <NodeName>CertificateType</NodeName>
            <Value>x509v3</Value>
          </Node>
          <Node>
            <NodeName>CertSHA256Fingerprint</NodeName>
            <Value>0ef08a3d2118700474ca51fa25dc5e6d3d63d779aaad8238b608a853761da533</Value>
          </Node>
        </Node>
      </Node>
    </Node>
  </Node>
</MgmtTree>

具有 SIM 凭据 (EAP-AKA) 的配置文件

以下示例演示了具有以下特征的网络的配置文件:

  • 好记的网络名称设为 Purple Passpoint
  • FQDN 设为 wlan.mnc888.mcc999.3gppnetwork.org
  • PLMN ID 为 999888 的 SIM 卡凭据
  • EAP 方法设置为 23 (EAP-AKA)
<MgmtTree xmlns="syncml:dmddf1.2">
  <VerDTD>1.2</VerDTD>
  <Node>
    <NodeName>PerProviderSubscription</NodeName>
    <RTProperties>
      <Type>
        <DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
      </Type>
    </RTProperties>
    <Node>
      <NodeName>i001</NodeName>
      <Node>
        <NodeName>HomeSP</NodeName>
        <Node>
          <NodeName>FriendlyName</NodeName>
          <Value>Purple Passpoint</Value>
        </Node>
        <Node>
          <NodeName>FQDN</NodeName>
          <Value>purplewifi.com</Value>
        </Node>
      </Node>
      <Node>
        <NodeName>Credential</NodeName>
        <Node>
          <NodeName>Realm</NodeName>
          <Value>wlan.mnc888.mcc999.3gppnetwork.org</Value>
        </Node>
        <Node>
          <NodeName>SIM</NodeName>
          <Node>
            <NodeName>IMSI</NodeName>
            <Value>999888*</Value>
          </Node>
          <Node>
            <NodeName>EAPType</NodeName>
            <Value>23</Value>
          </Node>
        </Node>
      </Node>
    </Node>
  </Node>
</MgmtTree>

身份验证建议

搭载 Android 8.x 或 Android 9 且装有 Passpoint R1 EAP-SIM、EAP-AKA 或 EAP-AKA' 配置文件的设备将无法自动连接到 Passpoint 网络。此问题会减少 Wi-Fi 分流,从而对用户、运营商和服务造成影响。

细分 影响 影响大小
运营商和 Passpoint 服务提供商 增加移动网络的负载。 使用 Passpoint R1 的任何运营商。
用户 错过了自动连接到运营商 Wi-Fi 接入点 (AP) 的机会,从而增加流量费用。 在支持 Passpoint R1 的运营商网络上运行设备的任何用户。

失败原因

Passpoint 会指定一种机制,将通告的 (ANQP) 服务提供商与设备上安装的配置文件进行匹配。以下针对 EAP-SIM、EAP-AKA 和 EAP-AKA' 的匹配规则是侧重于 EAP-SIM/AKA/AKA' 失败的部分规则:

If the FQDN (Fully Qualified Domain Name) matches
    then the service is a Home Service Provider.
Else: If the PLMN ID (3GPP Network) matches
    then the service is a Roaming Service Provider.

第二个条件在 Android 8.0 中进行了修改:

Else: If the PLMN ID (3GPP Network) matches AND the NAI Realm matches
    then the service is a Roaming Service Provider.

修改后,系统检测不到任何与以前正常工作的服务提供商匹配的项目,因此 Passpoint 设备未自动连接。

解决方法

要解决修改后的匹配条件存在的问题,运营商和服务提供商需要将网络访问标识符 (NAI) Realm 添加到由 Passpoint AP 发布的信息中。

推荐的解决方案是让网络服务提供商实施网络端解决方法,这种方法部署速度最快。设备端解决方法依赖于原始设备制造商 (OEM) 从 Android 开源项目 (AOSP) 获取变更列表 (CL),然后更新在实际应用中的设备。

针对运营商和 Passpoint 服务提供商的网络修复

网络端解决方法需要重新配置网络以添加 NAI Realm ANQP 元素(如下文所述)。Passpoint 规范不需要 NAI Realm ANQP 元素,但添加此属性符合 Passpoint 规范,因此符合规范的客户端实现应该不会发生中断。

  1. 添加 NAI Realm ANQP 元素。
  2. 设置 NAI Realm 子字段以匹配设备上所安装配置文件的 Realm
  3. 根据每个 EAP 类型设置以下信息:

    • EAP-TTLS:设置 EAPMethod(21) 和支持的内部身份验证类型(PAPCHAPMS-CHAPMS-CHAP-V2
    • EAP-TLS:设置 EAPMethod(13)
    • EAP-SIM:设置 EAPMethod(18)
    • EAP-AKA:设置 EAPMethod(23)
    • EAP-AKA:设置 EAPMethod(50)

针对 OEM 的设备/AOSP 修复

如需实施设备端解决方法,OEM 需要选择补丁程序 CL aosp/718508。此补丁程序可以在以下系统版本上应用(但不能应用于 Android 10 或更高版本):

  • Android 9
  • Android 8.x

挑选补丁程序后,OEM 需要更新实际使用中的设备。