Passpoint (無線基地台 2.0)

PasspointWi-Fi Alliance (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)。

實作

Android 11 以上版本

如要在搭載 Android 11 以上版本的裝置上支援 Passpoint,裝置製造商必須提供 802.11u 韌體支援。支援 Passpoint 的所有其他規定都包含在 Android 開放原始碼計畫中。

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 的所有其他規定都包含在 Android 開放原始碼計畫中。

驗證

如要驗證 Passpoint 功能的導入狀態,請執行下列 Passpoint 套件單元測試:

服務測試:

atest com.android.server.wifi.hotspot2

管理員測試:

atest android.net.wifi.hotspot2

Passpoint R1 佈建

自 Android 6.0 起,Android 就支援 Passpoint R1,可透過網路下載含有設定檔和憑證資訊的特殊檔案,以便佈建 Passpoint R1 (第 1 版) 憑證。用戶端會自動啟動 Wi-Fi 資訊的專屬安裝程式,讓使用者在接受或拒絕內容前,先查看部分資訊。

檔案中包含的設定檔資訊會用於比對從支援 Passpoint 的存取點擷取的資料,並自動將憑證套用至任何相符的網路。

Android 參照實作支援 EAP-TTLS、EAP-TLS、EAP-SIM、EAP-AKA 和 EAP-AKA'。

下載機制

密碼基地台設定檔必須託管在網頁伺服器上,並應使用 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 編碼內容必須包含 MIME 多部分內容,且 Content-Typemultipart/mixed。以下是多部分內容的各個部分。

Part Content-Type (不含引號) 必要 說明
個人資料 application/x-passpoint-profile 一律啟用 OMA-DM SyncML 格式的酬載,其中包含 Passpoint R1 PerProviderSubscription 格式的 MO,適用於 HomeSPCredential
信任憑證 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。XML 檔案範例會顯示在設定檔 OMA-DM 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) 網域名稱

如果存取點網路管理員需要指定的 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 伺服器驗證,可以不使用根 CA 憑證來佈建設定檔。在這種情況下,系統會根據信任存放區中安裝的公開根 CA 憑證,驗證 AAA 伺服器憑證。

Passpoint R2 佈建

Android 10 推出了對 Passpoint R2 功能的支援。Passpoint R2 會實作線上註冊 (OSU),這是佈建新 Passpoint 設定檔的標準方法。Android 10 以上版本支援使用與開放式 OSU ESS 上的 SOAP-XML 通訊協定佈建 EAP-TTLS 設定檔。

支援的 Passpoint R2 功能只需要 AOSP 參考程式碼 (不需要額外的驅動程式或韌體支援)。Android 開放原始碼計畫參考程式碼也包含設定應用程式中 Passpoint R2 UI 的預設導入方式。

Android 偵測到 Passpoint R2 存取點時,Android 架構會執行以下操作:

  1. 顯示 AP 在 Wi-Fi 挑選器中公告的服務供應商清單 (以及顯示 SSID)。
  2. 提示使用者輕觸其中一個服務供應商,設定 Passpoint 設定檔。
  3. 引導使用者完成 Passpoint 設定檔設定流程。
  4. 在完成後安裝產生的 Passpoint 設定檔。
  5. 使用新佈建的 Passpoint 設定檔與 Passpoint 網路建立關聯。

Passpoint R3 功能

Android 12 推出以下 Passpoint R3 功能,可改善使用者體驗,並讓網路符合當地法律:

條款及細則

在某些地點和場合,我們必須依法要求使用者接受條款及細則,才能提供網路存取權。這項功能可讓網路部署作業以安全的 Passpoint 網路取代使用開放式網路的不安全網頁認證入口。當使用者需要接受條款及細則時,系統會向他們顯示通知。

條款和細則網址必須指向使用 HTTPS 的安全網站。如果網址指向不安全的網站,架構會立即中斷連線並封鎖網路。

場地資訊網址

允許網路經營者和場地向使用者提供其他資訊,例如場地地圖、目錄、促銷活動和優待券。網路連線後,系統會向使用者顯示通知。

場地資訊網址必須指向使用 HTTPS 的安全網站。如果網址指向不安全的網站,架構會忽略該網址,並不會顯示通知。

其他 Passpoint 功能

Android 11 推出以下 Passpoint 功能,可改善使用者體驗、電力使用量和部署彈性。

到期日強制執行和通知
在設定檔中強制執行到期日,可讓架構避免自動連線至憑證已過期的存取點,因為這類連線必定會失敗。這樣可以防止播出時間,並節省電池和後端頻寬。當符合使用者設定檔的網路在範圍內,且該設定檔已過期時,架構就會向使用者顯示通知。
使用相同 FQDN 的多個剖析檔
如果電信業者部署了 Passpoint 網路,並使用多個公開陸地行動網路 (PLMN) ID,則可以使用相同的 FQDN 佈建多個 Passpoint 設定檔,每個 PLMN ID 一個,系統會自動將這些設定檔與已安裝的 SIM 卡配對,並用於連線。

Android 12 推出了下列 Passpoint 功能,有助於提升使用者體驗、耗電量和部署彈性:

經修飾的身分識別資訊前置字串
透過裝飾前置字串的網路進行驗證時,網路運算子可以更新網路存取識別碼 (NAI),以便透過 AAA 網路中的多個 Proxy 執行明確轉送作業 (請參閱 RFC 7542)。Android 12 會根據 PPS-MO 擴充功能的 WBA 規格實作這項功能。
即將處理的取消驗證
允許網路作業人員向裝置發出信號,指出在特定時間 (透過逾時延遲指定) 內,系統無法使用用於驗證網路的憑證。收到這項信號後,裝置會在逾時延遲時間到期前,嘗試使用相同的憑證重新連線至網路。相反地,不支援這項功能的裝置可能會在服務無法使用時,嘗試重複連線。

OMA-DM PerProviderSubscription-MO XML 設定檔範例

使用者名稱/密碼憑證的設定檔 (EAP-TTLS)

以下範例說明廣告聯播網的設定檔,其中包含:

  • 網路友善名稱已設為「Example Network
  • FQDN 已設為 hotspot.example.net
  • 漫遊聯盟 OIs (適用於漫遊)
  • 使用者名稱 user 的憑證、使用 Base64 編碼的密碼 password,且運作範圍設為 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
  • Roaming Consortium OIs (for roaming)
  • 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 裝置不會自動連線。

解決方法

為解決修改後的配對條件問題,電信業者和服務供應商需要在 Passpoint AP 發布的資訊中加入網路存取 ID (NAI) 領域。

網路服務供應商的建議解決方案是實作網路端解決方法,以便盡快完成部署作業。裝置端的解決方法取決於原始設備製造商 (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 以上版本):

  • Android 9
  • Android 8.x 版

當修補程式推出時,原始設備製造商 (OEM) 就需要更新現場的裝置。