Passpoint(熱點 2.0)

PasspointWi-Fi聯盟(WFA)協議,它允許移動設備發現和Wi-Fi熱點提供互聯網接入驗證。

設備支持

為了支持Passpoint,設備製造商需要實現hardware/interfaces/wifi/supplicant/1.0或更高版本。在Wi-Fi HAL界面設計語言(HIDL)在Android開源項目(AOSP)提供限定了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.mk位於device/<oem>/<device> ,修改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/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) 進行保護,因為它可能包含明文密碼或私鑰數據。內容由包裝的多部分 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 元素(例如按鈕)來觸發下載(不支持自動重定向到下載 URL)。此行為特定於 Google Chrome;其他網絡瀏覽器可能會也可能不會提供類似的功能。

文件組合

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

部分內容類型(少引號)必需的描述
輪廓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文本,所述的指定部位HomeSPCredential子樹在Passpoint R2技術規範版本1.0.0,第9.1節。

頂級節點必須MgmtTree和即時子節點必須是PerProviderSubscription 。一個例子的XML文件中出現了實施例輪廓OMA-DM XML

下面的子樹節點下使用HomeSP

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

下面的子樹節點下使用Credential

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

    • Username :String包含用戶名
    • 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* 匹配任何 IMSI 以 123 開頭的 SIM 卡。

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

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

需要一節AAA域名Passpoint網絡管理員獨立地由接入網查詢協議(ANQP)網絡發布的完全限定域名(FQDN)的規定可以在根據新的節點指定的FQDN的分號分隔列表Extension子樹.這是一個可選節點,運行 Android 10 或更低版本的設備會忽略此節點。

  • Android :Android的擴展子樹

    • AAAServerTrustedNames :所需的AAA服務器信任與設置以下節點的名稱:

      • FQDN :String包含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 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 網絡替換使用開放網絡的不安全強制門戶。當需要接受條款和條件時,會向用戶顯示通知。
場地信息網址
允許網絡運營商和場所向用戶提供附加信息,例如場所地圖、目錄、促銷和優惠券。當網絡連接時,會向用戶顯示通知。

其他 Passpoint 功能

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

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

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

修飾身份前綴
當認證與前綴裝飾網,裝飾身份前綴允許網絡運營商升級網絡訪問標識符(NAI)通過AAA網絡內多個代理進行顯式路由(參見RFC 7542 )。機器人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.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
  • SIM憑證與PLMN ID 999888
  • 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)並支持內AUTH類型( 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 或更高版本):

  • 安卓 9
  • 安卓 8.x

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