Passpoint (無線基地台 2.0)

PasspointWi-Fi 聯盟 (WFA) 通訊協定,可讓行動裝置探索並驗證提供網際網路存取的 Wi-Fi 無線基地台。

裝置支援

如要支援 Passpoint,裝置製造商必須實作 Supplicant 介面。從 Android 13 開始,介面會使用 AIDL 定義 HAL。在 Android 13 之前的版本中,介面和供應商分區使用 HIDL。HIDL 檔案位於 hardware/interfaces/supplicant/1.x,AIDL 檔案則位於 hardware/interfaces/supplicant/aidl。Supplicant 支援 802.11u 標準,特別是網路探索和選取功能,例如通用廣告服務 (GAS) 和存取網路查詢通訊協定 (ANQP)。

實作

Android 11 以上版本

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

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

Android 開放原始碼計畫 (AOSP) 包含支援 Passpoint 的所有其他規定。

驗證

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

服務測試:

atest com.android.server.wifi.hotspot2

管理員測試:

atest android.net.wifi.hotspot2

Passpoint R1 佈建

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

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

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

下載機制

Passpoint 設定檔必須代管在網頁伺服器上,且應以 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 元素 (例如按鈕) 才能觸發下載作業 (系統不支援自動重新導向至下載網址)。這項行為是 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 檔案會顯示在「Example profile OMA-DM XML」(設定檔 OMA-DM XML 範例) 中。

HomeSP 下使用下列子樹節點:

  • FriendlyName:必須設定,做為顯示文字
  • FQDN:必要
  • RoamingConsortiumOI

Credential 下使用下列子樹節點:

  • Realm:必須是不為空的字串
  • UsernamePassword:使用 EAP-TTLS 時必須設定下列節點:

    • Username:包含使用者名稱的字串
    • Password:採用 Base64 編碼的字串 (在下方範例中,設為 cGFzc3dvcmQ=,也就是「password」的 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) 網域名稱

如果 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 伺服器驗證。如果 Passpoint 網路管理員想依賴公開受信任的根 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 使用者介面的預設實作方式。

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 網路,取代使用開放式網路的不安全強制回應入口網站。如果使用者必須接受條款及細則,系統會顯示通知。

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

場地資訊網址

網路營運商和場地可藉此向使用者提供額外資訊,例如場地地圖、目錄、促銷活動和優待券。連上網路時,系統會向使用者顯示通知。

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

其他 Passpoint 功能

Android 11 推出下列 Passpoint 功能,可提升使用者體驗、省電效果和部署彈性。

強制執行到期日和通知
強制設定設定檔的到期日,可讓架構避免自動連線至憑證過期的存取點,否則連線一定會失敗。這樣可避免使用通話時間,並節省電池和後端頻寬。當符合使用者設定檔的網路在範圍內,且設定檔已過期時,架構會向使用者顯示通知。
多個商家檔案的 FQDN 相同
部署 Passpoint 網路並使用多個公眾陸地行動網路 (PLMN) ID 的電信業者,可以為每個 PLMN ID 佈建多個具有相同 FQDN 的 Passpoint 設定檔,系統會自動比對已安裝的 SIM 卡,並用來連線至網路。

Android 12 推出下列 Passpoint 功能,可提升使用者體驗、省電,並提高部署彈性:

裝飾身分前置字元
使用前置字元裝飾驗證網路時,裝飾的身分前置字元可讓網路業者更新網路存取 ID (NAI),透過 AAA 網路內的多個 Proxy 執行明確的轉送 (詳情請參閱 RFC 7542)。Android 12 會根據 WBA 的 PPS-MO 擴充功能規格實作這項功能。
即將取消驗證的處理方式
網路業者可向裝置發出信號,指出在特定時間內 (透過逾時延遲指定),無法使用驗證網路的憑證存取服務。收到這個訊號後,裝置不會嘗試重新連線到具有相同憑證的網路,直到逾時延遲時間結束為止。反之,不支援這項功能的裝置可能會在服務無法使用時,嘗試重複連線至網路。

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.com」和「trusted.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>

驗證建議

如果裝置搭載 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 修復

如要實作裝置端解決方法,原始設備製造商必須挑選修補程式 CL aosp/718508。這個修補程式可以套用至下列版本 (不適用於 Android 10 以上版本):

  • Android 9
  • Android 8.x

OEM 取得修補程式後,必須更新現場裝置。