Passpoint(熱點 2.0)

Passpoint是一種Wi-Fi 聯盟 (WFA)協議,可讓行動裝置發現並驗證提供網路存取的 Wi-Fi 熱點。

設備支援

為了支援 Passpoint,設備製造商需要實作 Supplicant 介面。從 Android 13 開始,該介面使用 AIDL 進行 HAL 定義。對於 Android 13 之前的版本,介面和供應商分區使用 HIDL。 HIDL 檔案位於hardware/interfaces/supplicant/1.x中,AIDL 檔案位於hardware/interfaces/supplicant/aidl 。請求者提供對 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)

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

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 表示的包裝的多部分 MIME 文字組成,並根據 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 元素(例如按鈕)來觸發下載(不支援自動重定向到下載 URL)。此行為特定於 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 必需單一 X.509v3 base64 編碼的憑證有效負載。
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 編碼字串(設定為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 字串可以完全由十進制數字組成以強製完全相等匹配,也可以由 5 或 6 個十進制數字後跟星號 (*) 組成以僅將 IMSI 匹配放寬到 MCC/MNC。例如,IMSI 字串 123456* 與 MCC 為 123、MNC 為 456 的任何 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
  • 漫遊聯盟 OIs(用於漫遊)
  • 使用者名稱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
  • 漫遊聯盟 OIs(用於漫遊)
  • 領域設定為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) 領域新增至 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

當補丁生效後,原始設備製造商需要現場更新設備。