Passpoint (hotspot 2.0)

Passpoint è un protocollo Wi-Fi Alliance (WFA) che consente ai dispositivi mobili di rilevare e autenticarsi su hotspot Wi-Fi che forniscono accesso a Internet.

Supporto del dispositivo

Per supportare Passpoint, i produttori di dispositivi devono implementare hardware/interfaces/wifi/supplicant/1.0 o versioni successive. Il Wi-Fi HAL Interface Design Language (HIDL) fornito nell'Android Open Source Project (AOSP) definisce un HAL per il supplicant. Il richiedente fornisce supporto per lo standard 802.11u, in particolare per le funzionalità di rilevamento e selezione della rete come il Generic Advertisement Service (GAS) e il protocollo di query di rete di accesso (ANQP).

Implementazione

Android 11 o versioni successive

Per supportare Passpoint su dispositivi con Android 11 o versioni successive, i produttori di dispositivi devono fornire supporto firmware per 802.11u. Tutti gli altri requisiti per supportare Passpoint sono inclusi in AOSP.

Android 10 o precedente

Per i dispositivi con Android 10 o versioni precedenti, i produttori di dispositivi devono fornire sia il framework che il supporto HAL/firmware:

  • Framework: Abilita Passpoint (richiede un flag di funzionalità)
  • Firmware: supporto per 802.11u

Per supportare Passpoint, implementa l'HAL Wi-Fi e abilita il flag di funzionalità per Passpoint. In device.mk situato in device/<oem>/<device> , modifica la variabile di ambiente PRODUCT_COPY_FILES per includere il supporto per la funzione Passpoint:

PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml

Tutti gli altri requisiti per supportare Passpoint sono inclusi in AOSP.

Convalida

Per convalidare l'implementazione della funzione Passpoint, utilizza l'insieme di unit test e test di integrazione forniti in Android Comms Test Suite (ACTS).

Test unitari

Esegui i seguenti unit test del pacchetto Passpoint.

Prove di servizio:

atest com.android.server.wifi.hotspot2

Test manager:

atest android.net.wifi.hotspot2

Test di integrazione (ACTS)

La suite di test ACTS Passpoint, che si trova in tools/test/connectivity/acts_tests/tests/google/wifi/WifiPasspointTest.py , implementa una serie di test funzionali.

Provisioning del passpoint R1

Android supporta Passpoint R1 da Android 6.0, consentendo il provisioning delle credenziali Passpoint R1 (versione 1) tramite il download basato sul Web di un file speciale che contiene informazioni sul profilo e sulle credenziali. Il client avvia automaticamente un programma di installazione speciale per le informazioni Wi-Fi e consente all'utente di visualizzare parti delle informazioni prima di accettare o rifiutare il contenuto.

Le informazioni sul profilo contenute nel file vengono utilizzate per la corrispondenza con i dati recuperati dai punti di accesso abilitati Passpoint e le credenziali vengono applicate automaticamente per qualsiasi rete abbinata.

L'implementazione di riferimento di Android supporta EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA e EAP-AKA'.

Scarica il meccanismo

Il file di configurazione di Passpoint deve essere ospitato su un server Web e deve essere protetto con TLS (HTTPS) perché potrebbe contenere password in chiaro o dati di chiave privata. Il contenuto è costituito da testo MIME multiparte avvolto rappresentato in UTF-8 e codificato nella codifica base64 per RFC-2045 sezione 6.8.

I seguenti campi di intestazione HTTP vengono utilizzati dal client per avviare automaticamente un programma di installazione Wi-Fi sul dispositivo:

  • Content-Type deve essere impostato su application/x-wifi-config .
  • Content-Transfer-Encoding deve essere impostato su base64 .
  • Content-Disposition non deve essere impostato.

Il metodo HTTP utilizzato per recuperare il file deve essere GET. Ogni volta che un HTTP GET dal browser riceve una risposta con queste intestazioni MIME, l'app di installazione viene avviata. Il download deve essere attivato toccando un elemento HTML come un pulsante (i reindirizzamenti automatici a un URL di download non sono supportati). Questo comportamento è specifico di Google Chrome; altri browser Web possono o meno fornire funzionalità simili.

Composizione file

Il contenuto codificato Base64 deve essere costituito da contenuto multiparte MIME con un Content-Type di multipart/mixed . Le parti seguenti costituiscono le singole parti del contenuto multiparte.

Parte Tipo di contenuto (meno virgolette) Necessario Descrizione
Profilo application/x-passpoint-profile Sempre Payload formattato OMA-DM SyncML contenente il MO formattato Passpoint R1 PerProviderSubscription per HomeSP e Credential .
Certificato di fiducia application/x-x509-ca-cert Richiesto per EAP-TLS e EAP-TTLS Un singolo payload del certificato con codifica base64 X.509v3.
Tasto EAP-TLS application/x-pkcs12 Richiesto per EAP-TLS Una struttura PKCS #12 ASN.1 con codifica base64 contenente una catena di certificati client con almeno il certificato client e la chiave privata associata. Il contenitore PKCS 12, la chiave privata ei certificati devono essere tutti in chiaro senza password.

La sezione Profilo deve essere trasferita come testo XML con codifica base64 e UTF-8 che specifica parti delle sottostrutture HomeSP e Credential nella specifica tecnica Passpoint R2 versione 1.0.0, sezione 9.1.

Il nodo di primo livello deve essere MgmtTree e il sottonodo immediato deve essere PerProviderSubscription . Un file XML di esempio viene visualizzato nel profilo di esempio OMA-DM XML .

I seguenti nodi della sottostruttura vengono utilizzati in HomeSP :

  • FriendlyName : deve essere impostato; utilizzato come testo di visualizzazione
  • FQDN : obbligatorio
  • RoamingConsortiumOI

I seguenti nodi della sottostruttura vengono utilizzati in Credential :

  • Realm : deve essere una stringa non vuota
  • UsernamePassword : richiesta per EAP-TTLS con i seguenti nodi impostati:

    • Username : stringa che contiene il nome utente
    • Password : stringa con codifica Base64 (impostata su cGFzc3dvcmQ= , la stringa con codifica Base64 per "password", nell'esempio seguente)
    • EAPMethod/EAPType : deve essere impostato su 21
    • EAPMethod/InnerMethod : deve essere impostato su uno tra PAP , CHAP , MS-CHAP o MS-CHAP-V2
  • DigitalCertificate : richiesto per EAP-TLS. Devono essere impostati i seguenti nodi:

    • CertificateType impostato su x509v3
    • CertSHA256Fingerprint impostata sul digest SHA-256 corretto del certificato client nella sezione MIME della chiave EAP-TLS
  • SIM : richiesta per EAP-SIM, EAP-AKA e EAP-AKA'. Il campo EAPType deve essere impostato sul tipo EAP appropriato e IMSI deve corrispondere a un IMSI di una delle schede SIM installate nel dispositivo al momento del provisioning. La stringa IMSI può essere costituita interamente da cifre decimali per forzare la corrispondenza di uguaglianza completa o da zero o più cifre decimali seguite da un asterisco (*) per rilassare la corrispondenza IMSI solo con il prefisso. Ad esempio, la stringa IMSI 123* corrisponde a qualsiasi scheda SIM con un IMSI che inizia con 123.

Android 11 introduce funzionalità che rendono più flessibile il provisioning di Passpoint R1.

Nome di dominio di autenticazione, autorizzazione e contabilità (AAA) separato

Gli amministratori di rete Passpoint che richiedono un nome di dominio AAA specificato indipendentemente dal nome di dominio completo (FQDN) pubblicizzato dalla rete tramite il protocollo ANQP (Access Network Query Protocol) possono specificare un elenco delimitato da punto e virgola di FQDN in un nuovo nodo nella sottostruttura Extension . Questo è un nodo opzionale e i dispositivi che eseguono Android versione 10 o precedenti ignorano questo nodo.

  • Android : sottoalbero dell'estensione Android

    • AAAServerTrustedNames : richiesto per i nomi attendibili del server AAA con i seguenti nodi impostati:

      • FQDN : stringa che contiene i nomi attendibili del server AAA. Utilizzare il punto e virgola per separare i nomi attendibili. Ad esempio, example.org;example.com .
CA radice private autofirmate
Gli amministratori di rete Passpoint che gestiscono internamente i propri certificati possono fornire profili con una CA privata autofirmata per l'autenticazione AAA.
Consenti l'installazione di profili senza un certificato CA radice
Il certificato della CA radice allegato al profilo viene utilizzato per l'autenticazione del server AAA. Gli amministratori di rete Passpoint che desiderano fare affidamento su CA radice pubbliche attendibili per l'autenticazione del server AAA possono eseguire il provisioning dei profili senza un certificato CA radice. In questo caso, il sistema verifica i certificati del server AAA rispetto ai certificati della CA radice pubblica installati nel truststore.

Provisioning del passpoint R2

Android 10 ha introdotto il supporto per le funzionalità Passpoint R2. Passpoint R2 implementa la registrazione online (OSU), un metodo standard per fornire nuovi profili Passpoint. Android 10 e versioni successive supportano il provisioning dei profili EAP-TTLS utilizzando il protocollo SOAP-XML su OSU ESS aperto.

Le funzionalità di Passpoint R2 supportate e supportate richiedono solo il codice di riferimento AOSP, non sono richiesti driver aggiuntivi o supporto firmware). Il codice di riferimento AOSP include anche un'implementazione predefinita dell'interfaccia utente Passpoint R2 nell'app Impostazioni.

Quando Android rileva un punto di accesso Passpoint R2, il framework Android:

  1. Visualizza un elenco dei fornitori di servizi pubblicizzati dall'AP nel selettore Wi-Fi (oltre a visualizzare gli SSID).
  2. Richiede all'utente di toccare uno dei fornitori di servizi per impostare un profilo Passpoint.
  3. Guida l'utente attraverso il flusso di configurazione del profilo Passpoint.
  4. Installa il profilo Passpoint risultante al completamento.
  5. Si associa alla rete Passpoint utilizzando il profilo Passpoint appena fornito.

Funzionalità Passpoint R3

Android 12 introduce le seguenti funzionalità di Passpoint R3 che migliorano l'esperienza dell'utente e consentono alle reti di conformarsi alle leggi locali:

Termini e Condizioni

L'accettazione di termini e condizioni è legalmente richiesta in alcune località e sedi per fornire l'accesso alla rete. Questa funzione consente alle implementazioni di rete di sostituire captive portal non sicuri, che utilizzano reti aperte, con una rete Passpoint sicura. Viene visualizzata una notifica all'utente quando è necessario accettare termini e condizioni.

L'URL dei termini e delle condizioni deve puntare a un sito Web protetto tramite HTTPS. Se l'URL punta a un sito Web non sicuro, il framework si disconnette immediatamente e blocca la rete.

URL delle informazioni sulla sede

Consente agli operatori di rete e alle sedi di fornire informazioni aggiuntive all'utente, come mappe delle sedi, elenchi, promozioni e coupon. Viene visualizzata una notifica all'utente quando la rete è connessa.

L'URL delle informazioni sulla sede deve puntare a un sito Web protetto tramite HTTPS. Se l'URL punta a un sito Web non sicuro, il framework ignora l'URL e non visualizza una notifica.

Altre caratteristiche del Passpoint

Android 11 introduce le seguenti funzionalità Passpoint che migliorano l'esperienza utente, il consumo energetico e la flessibilità di distribuzione.

Applicazione e notifica della data di scadenza
L'applicazione delle date di scadenza sui profili consente al framework di evitare la connessione automatica ai punti di accesso con credenziali scadute, che sono destinate a fallire. Ciò impedisce l'utilizzo del tempo di trasmissione e consente di risparmiare batteria e larghezza di banda del back-end. Il framework visualizza una notifica all'utente quando una rete corrispondente al suo profilo è nell'intervallo e il profilo è scaduto.
Profili multipli con FQDN identico
I gestori che implementano reti Passpoint e utilizzano più ID PLMN (Public Land Mobile Network) possono fornire più profili Passpoint con lo stesso FQDN, uno per ciascun ID PLMN, che viene automaticamente abbinato alla scheda SIM installata e utilizzato per connettere la rete.

Android 12 introduce le seguenti funzionalità Passpoint che migliorano l'esperienza utente, il consumo energetico e la flessibilità di distribuzione:

Prefisso di identità decorato
Quando si esegue l'autenticazione su reti con una decorazione di prefisso, il prefisso di identità decorato consente agli operatori di rete di aggiornare il Network Access Identifier (NAI) per eseguire il routing esplicito tramite più proxy all'interno di una rete AAA (vedere RFC 7542 ). Android 12 implementa questa funzionalità secondo la specifica WBA per le estensioni PPS-MO .
Disautenticazione imminente gestione
Consente agli operatori di rete di segnalare a un dispositivo che il servizio non è disponibile per la credenziale utilizzata per l'autenticazione alla rete per un determinato periodo (specificato tramite un ritardo di timeout). Dopo aver ricevuto questo segnale, i dispositivi non tenteranno di riconnettersi alla rete con la stessa credenziale fino alla scadenza del ritardo di timeout. Al contrario, i dispositivi che non supportano questa funzionalità potrebbero tentare di riconnettersi ripetutamente alla rete mentre il servizio non è disponibile.

Esempi di profili XML OMA-DM PerProviderSubscription-MO

Profilo con credenziali nome utente/password (EAP-TTLS)

L'esempio seguente mostra un profilo per una rete con:

  • Nome descrittivo della rete impostato su Example Network
  • FQDN impostato su hotspot.example.net
  • OI consorzio roaming (per roaming)
  • Credenziale con username user , password password codificata con Base64 e realm impostato su example.net
  • Metodo EAP impostato su 21 (EAP-TTLS)
  • Metodo interno di fase 2 impostato su MS-CHAP-V2
  • Nomi di dominio AAA alternativi impostati su trusted.com e 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>

Profilo con credenziali di certificato digitale (EAP-TLS)

L'esempio seguente mostra un profilo per una rete con:

  • Nome descrittivo della rete impostato su GlobalRoaming
  • FQDN impostato su globalroaming.net
  • OI del Consorzio Roaming (per il roaming)
  • Reame impostato su users.globalroaming.net
  • Credenziale con un certificato digitale con l'impronta digitale specificata
<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>

Profilo con credenziali SIM (EAP-AKA)

L'esempio seguente mostra un profilo per una rete con:

  • Nome descrittivo della rete impostato su Purple Passpoint
  • FQDN impostato su wlan.mnc888.mcc999.3gppnetwork.org
  • Credenziale SIM con ID PLMN di 999888
  • Metodo EAP impostato su 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>

Avviso di autorizzazione

I dispositivi che eseguono Android 8.xo Android 9 con un profilo Passpoint R1 EAP-SIM, EAP-AKA o EAP-AKA' non si connettono automaticamente alla rete Passpoint. Questo problema riguarda utenti, operatori e servizi riducendo l'offload del Wi-Fi.

Segmento Impatto Dimensione dell'impatto
Vettori e fornitori di servizi Passpoint Aumento del carico sulla rete cellulare. Qualsiasi vettore che utilizza Passpoint R1.
Utenti Opportunità persa di connettersi automaticamente ai punti di accesso (AP) Wi-Fi dell'operatore, con conseguente aumento dei costi dei dati. Qualsiasi utente con un dispositivo che funziona su una rete di operatore che supporta Passpoint R1.

Causa del fallimento

Passpoint specifica un meccanismo per abbinare un provider di servizi pubblicizzato (ANQP) a un profilo installato sul dispositivo. Le seguenti regole di corrispondenza per EAP-SIM, EAP-AKA e EAP-AKA' sono un insieme parziale di regole incentrate sui fallimenti 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.

Il secondo criterio è stato modificato in Android 8.0:

Else: If the PLMN ID (3GPP Network) matches AND the NAI Realm matches
    then the service is a Roaming Service Provider.

Con questa modifica, il sistema non ha riscontrato corrispondenze per i fornitori di servizi precedentemente funzionanti, quindi i dispositivi Passpoint non si sono connessi automaticamente.

Soluzioni alternative

Per aggirare il problema dei criteri di corrispondenza modificati, i vettori e i fornitori di servizi devono aggiungere il regno dell'identificatore di accesso alla rete (NAI) alle informazioni pubblicate dal Passpoint AP.

La soluzione consigliata è che i provider di servizi di rete implementino una soluzione alternativa lato rete per il tempo di implementazione più rapido. Una soluzione alternativa lato dispositivo dipende dal fatto che gli OEM raccolgano un elenco di modifiche (CL) da AOSP e quindi aggiornino i dispositivi sul campo.

Correzione di rete per operatori e fornitori di servizi Passpoint

La soluzione alternativa lato rete richiede la riconfigurazione della rete per aggiungere l'elemento ANQP dell'area NAI come specificato di seguito. Le specifiche Passpoint non richiedono l'elemento ANQP del regno NAI, ma l'aggiunta di questa proprietà è conforme alle specifiche Passpoint, quindi le implementazioni client conformi alle specifiche non dovrebbero interrompersi.

  1. Aggiungi l'elemento ANQP del regno NAI.
  2. Impostare il sottocampo del regno NAI in modo che corrisponda al Realm del profilo installato sul dispositivo.
  3. Impostare le seguenti informazioni in base a ciascun tipo EAP:

    • EAP-TTLS: EAPMethod(21) e i tipi di autenticazione interna supportati ( PAP , CHAP , MS-CHAP o MS-CHAP-V2 )
    • EAP-TLS: EAPMethod(13)
    • EAP-SIM: EAPMethod(18)
    • EAP-AKA: Imposta EAPMethod(23)
    • EAP-AKA': Imposta EAPMethod(50)

Correzione del dispositivo/AOSP per gli OEM

Per implementare una soluzione alternativa lato dispositivo, gli OEM devono selezionare la patch CL aosp/718508 . Questa patch può essere applicata in aggiunta alle seguenti versioni (non si applica ad Android 10 o versioni successive):

  • Android 9
  • Android 8.x

Quando la patch viene ritirata, gli OEM devono aggiornare i dispositivi sul campo.