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)。

執行

安卓 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 Comms Test Suite (ACTS) 中提供的一組單元測試和集成測試。

單元測試

運行以下 Passpoint 包單元測試。

服務測試:

atest com.android.server.wifi.hotspot2

經理測試:

atest android.net.wifi.hotspot2

集成測試 (ACTS)

位於tools/test/connectivity/acts_tests/tests/google/wifi/WifiPasspointTest.py的 ACTS Passpoint 測試套件實現了一組功能測試。

Passpoint R1 配置

Android 自 Android 6.0 起就支持 Passpoint R1,允許通過基於 Web 的下載包含配置文件和憑據信息的特殊文件來配置 Passpoint R1(版本 1)憑據。客戶端會自動為 Wi-Fi 信息啟動一個特殊的安裝程序,並允許用戶在接受或拒絕內容之前查看部分信息。

文件中包含的配置文件信息用於匹配從啟用 Passpoint 的接入點檢索到的數據,並且憑據會自動應用於任何匹配的網絡。

Android 參考實現支持 EAP-TTLS、EAP-TLS、EAP-SIM、EAP-AKA 和 EAP-AKA'。

下載機制

Passpoint 配置文件必須託管在 Web 服務器上,並且應該使用 TLS (HTTPS) 進行保護,因為它可能包含明文密碼或私鑰數據。內容由以 UTF-8 表示並按照 RFC-2045 第 6.8 節以 base64 編碼進行編碼的多部分 MIME 文本組成。

客戶端使用以下 HTTP 標頭字段在設備上自動啟動 Wi-Fi 安裝程序:

  • Content-Type必須設置為application/x-wifi-config
  • Content-Transfer-Encoding必須設置為base64
  • 不得設置Content-Disposition

用於檢索文件的 HTTP 方法必須是 GET。每當來自瀏覽器的 HTTP GET 收到帶有這些 MIME 標頭的響應時,就會啟動安裝應用程序。必須通過點擊按鈕等 HTML 元素來觸發下載(不支持自動重定向到下載 URL)。此行為特定於 Google Chrome;其他網絡瀏覽器可能會也可能不會提供類似的功能。

文件構成

Base64 編碼的內容必須由 MIME 多部分內容組成,其Content-Typemultipart/mixed 。以下部分構成了多部分內容的各個部分。

部分內容類型(少引號)必需的描述
輪廓application/x-passpoint-profile總是OMA-DM SyncML 格式的有效負載,包含用於HomeSPCredential的 Passpoint R1 PerProviderSubscription格式的 MO。
信任證書application/x-x509-ca-cert EAP-TLS 和 EAP-TTLS 需要單個 X.509v3 base64 編碼的證書有效負載。
EAP-TLS 密鑰application/x-pkcs12 EAP-TLS 需要一個 base64 編碼的 PKCS #12 ASN.1 結構,包含一個客戶端證書鏈,其中至少包含客戶端證書和關聯的私鑰。 PKCS 12 容器以及私鑰和證書都必須是明文,沒有密碼。

Profile 部分必須作為 base64 編碼、UTF-8 編碼的 XML 文本傳輸,該文本在 Passpoint R2 Technical Specification Version 1.0.0 第 9.1 節中指定HomeSPCredential子樹的一部分。

頂級節點必須是MgmtTree並且直接子節點必須是PerProviderSubscription示例配置文件 OMA-DM XML中顯示了示例 XML 文件。

HomeSP下使用了以下子樹節點:

  • FriendlyName :必須設置;用作顯示文本
  • FQDN :必填
  • RoamingConsortiumOI

Credential下使用以下子樹節點:

  • Realm :必須是一個非空字符串
  • UsernamePassword :對於設置了以下節點的 EAP-TTLS 是必需的:

    • Username名:包含用戶名的字符串
    • Password :Base64 編碼字符串(設置為cGFzc3dvcmQ= ,“密碼”的 base64 編碼字符串,在下面的示例中)
    • 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* 匹配任何具有以 123 開頭的 IMSI 的 SIM 卡。

Android 11 引入了使 Passpoint R1 配置更加靈活的功能。

單獨的認證、授權和計費 (AAA) 域名

需要獨立於網絡通過接入網絡查詢協議 (ANQP) 通告的完全限定域名 (FQDN) 指定的 AAA 域名的 Passpoint 網絡管理員可以在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 及更高版本支持通過開放式 OSU ESS 使用 SOAP-XML 協議配置 EAP-TTLS 配置文件。

支持的 Passpoint R2 功能僅需要 AOSP 參考代碼,無需額外的驅動程序或固件支持)。 AOSP 參考代碼還包括設置應用程序中 Passpoint R2 UI 的默認實現。

當 Android 檢測到 Passpoint R2 接入點時,Android 框架:

  1. 在 Wi-Fi 選擇器中顯示 AP 通告的服務提供商列表(除了顯示 SSID)。
  2. 提示用戶點擊服務提供商之一來設置 Passpoint 配置文件。
  3. 引導用戶完成 Passpoint 配置文件設置流程。
  4. 成功完成後安裝生成的 Passpoint 配置文件。
  5. 使用新配置的 Passpoint 配置文件關聯到 Passpoint 網絡。

Passpoint R3 功能

Android 12 引入了以下 Passpoint R3 功能,可改善用戶體驗並允許網絡遵守當地法律:

條款和條件

在某些地點和場所,法律要求接受條款和條件以提供網絡訪問。此功能允許網絡部署將使用開放網絡的不安全強制門戶替換為安全的 Passpoint 網絡。當需要接受條款和條件時,會向用戶顯示通知。

條款和條件 URL 必須指向使用 HTTPS 的安全網站。如果 URL 指向不安全的網站,框架會立即斷開連接並阻止網絡。

場地信息網址

允許網絡運營商和場所向用戶提供附加信息,例如場所地圖、目錄、促銷和優惠券。當網絡連接時,會向用戶顯示通知。

場地信息 URL 必須指向使用 HTTPS 的安全網站。如果 URL 指向不安全的網站,框架會忽略 URL 並且不顯示通知。

其他 Passpoint 功能

Android 11 引入了以下 Passpoint 功能,可改善用戶體驗、功耗和部署靈活性。

到期日執行和通知
在配置文件上強制執行到期日期允許框架避免自動連接到具有過期憑據的接入點,這必然會失敗。這可以防止通話時間的使用,並節省電池和後端帶寬。當與其配置文件匹配的網絡在範圍內並且配置文件已過期時,該框架會向用戶顯示通知。
具有相同 FQDN 的多個配置文件
部署 Passpoint 網絡並使用多個公共陸地移動網絡 (PLMN) ID 的運營商可以提供具有相同 FQDN 的多個 Passpoint 配置文件,每個 PLMN ID 一個,自動與安裝的 SIM 卡匹配並用於連接網絡。

Android 12 引入了以下 Passpoint 功能,可改善用戶體驗、功耗和部署靈活性:

裝飾身份前綴
當使用前綴修飾對網絡進行身份驗證時,修飾的身份前綴允許網絡運營商更新網絡訪問標識符 (NAI),以通過 AAA 網絡內的多個代理執行顯式路由(請參閱RFC 7542 )。 Android 12 根據PPS-MO 擴展的 WBA 規範實現此功能。
取消身份驗證即將處理
允許網絡運營商向設備發出信號,表明在特定持續時間內(通過超時延遲指定),用於對網絡進行身份驗證的憑據無法使用服務。收到此信號後,設備將不會嘗試使用相同的憑據重新連接到網絡,直到超時延遲到期。相反,不支持此功能的設備可能會在服務不可用時嘗試重複重新連接到網絡。

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

具有用戶名/密碼憑據的配置文件 (EAP-TTLS)

以下示例演示了一個網絡的配置文件:

  • 網絡友好名稱設置為Example Network
  • FQDN 設置為hotspot.example.net
  • 漫遊聯盟 OI(用於漫遊)
  • 具有用戶名user的憑據, password使用 Base64 編碼,領域設置為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(用於漫遊)
  • 領域設置為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>

授權諮詢

使用 Passpoint R1 EAP-SIM、EAP-AKA 或 EAP-AKA 配置文件運行 Android 8.x 或 Android 9 的設備不會自動連接到 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) 領域添加到 Passpoint AP 發布的信息中。

推薦的解決方案是讓網絡服務提供商實施網絡側變通方案,以最快的部署時間。設備端解決方法取決於 OEM 從 AOSP 獲取更改列表 (CL),然後在現場更新設備。

運營商和 Passpoint 服務提供商的網絡修復

網絡端解決方法需要重新配置網絡以添加如下指定的 NAI 領域 ANQP 元素。 Passpoint 規範不需要 NAI 領域 ANQP 元素,但添加此屬性符合 Passpoint 規範,因此符合規範的客戶端實現不應中斷。

  1. 添加 NAI 領域 ANQP 元素。
  2. 設置 NAI 領域子字段以匹配設備上安裝的配置文件的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 或更高版本):

  • 安卓 9
  • 安卓 8.x

獲取補丁後,OEM 需要在現場更新設備。