Passpoint (Hotspot 2.0)

Passpoint est un protocole de la Wi-Fi Alliance (WFA) qui permet aux appareils mobiles de découvrir les points d'accès Wi-Fi qui fournissent un accès à Internet et de s'y authentifier.

Assistance relative aux appareils

Pour prendre en charge Passpoint, les fabricants d'appareils doivent implémenter l'interface Supplicant. À partir d'Android 13, l'interface utilise AIDL pour la définition HAL. Pour les versions antérieures à Android 13, les interfaces et les partitions du fournisseur utilisent HIDL. Les fichiers HIDL se trouvent dans hardware/interfaces/supplicant/1.x et les fichiers AIDL dans hardware/interfaces/supplicant/aidl. Le supplicant est compatible avec la norme 802.11u, en particulier avec les fonctionnalités de découverte et de sélection de réseau telles que le service d'annonce générique (GAS) et le protocole de requête de réseau d'accès (ANQP).

Implémentation

Android 11 ou version ultérieure

Pour prendre en charge Passpoint sur les appareils équipés d'Android 11 ou version ultérieure, les fabricants d'appareils doivent fournir une assistance logicielle pour la norme 802.11u. Toutes les autres exigences concernant la compatibilité avec Passpoint sont incluses dans AOSP.

Android 10 ou version antérieure

Pour les appareils équipés d'Android 10 ou version antérieure, les fabricants d'appareils doivent fournir une assistance pour le framework, le HAL et le micrologiciel :

  • Framework : activer Passpoint (nécessite un flag de fonctionnalité)
  • Micrologiciel : compatibilité avec 802.11u

Pour prendre en charge Passpoint, implémentez le HAL Wi-Fi et activez le flag de fonctionnalité pour Passpoint. Dans device.mk situé dans device/<oem>/<device>, modifiez la variable d'environnement PRODUCT_COPY_FILES pour inclure la compatibilité avec la fonctionnalité Passpoint :

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

Toutes les autres exigences concernant la compatibilité avec Passpoint sont incluses dans AOSP.

Validation

Pour valider l'implémentation de la fonctionnalité Passpoint, exécutez les tests unitaires du package Passpoint suivants :

Tests de service :

atest com.android.server.wifi.hotspot2

Tests pour les administrateurs :

atest android.net.wifi.hotspot2

Provisionnement Passpoint R1

Android est compatible avec Passpoint R1 depuis Android 6.0, ce qui permet le provisionnement des identifiants Passpoint R1 (version 1) via le téléchargement Web d'un fichier spécial contenant des informations sur le profil et les identifiants. Le client lance automatiquement un programme d'installation spécial pour les informations Wi-Fi et permet à l'utilisateur de consulter certaines informations avant d'accepter ou de refuser le contenu.

Les informations de profil contenues dans le fichier sont utilisées pour faire correspondre les données récupérées à partir des points d'accès compatibles Passpoint, et les identifiants sont automatiquement appliqués à tout réseau correspondant.

L'implémentation de référence Android est compatible avec EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA et EAP-AKA'.

Mécanisme de téléchargement

Le fichier de configuration Passpoint doit être hébergé sur un serveur Web et protégé avec TLS (HTTPS), car il peut contenir un mot de passe en texte clair ou des données de clé privée. Le contenu est constitué d'un texte MIME multipart encapsulé, représenté en UTF-8 et encodé en base64 conformément à la section 6.8 de la RFC-2045.

Les champs d'en-tête HTTP suivants sont utilisés par le client pour lancer automatiquement un programme d'installation Wi-Fi sur l'appareil :

  • Content-Type doit être défini sur application/x-wifi-config.
  • Content-Transfer-Encoding doit être défini sur base64.
  • Content-Disposition ne doit pas être défini.

La méthode HTTP utilisée pour récupérer le fichier doit être GET. Chaque fois qu'une requête HTTP GET du navigateur reçoit une réponse avec ces en-têtes MIME, l'application d'installation est lancée. Le téléchargement doit être déclenché en appuyant sur un élément HTML tel qu'un bouton (les redirections automatiques vers une URL de téléchargement ne sont pas acceptées). Ce comportement est spécifique à Google Chrome. D'autres navigateurs Web peuvent ou non fournir des fonctionnalités similaires.

Composition des fichiers

Le contenu encodé en base64 doit être constitué d'un contenu MIME multipart avec un Content-Type de multipart/mixed. Les parties suivantes constituent les parties individuelles du contenu multipartie.

Partie Content-Type (sans les guillemets) Obligatoire Description
Profil application/x-passpoint-profile Toujours Charge utile au format OMA-DM SyncML contenant le MO au format PerProviderSubscription Passpoint R1 pour HomeSP et Credential.
Certificat de confiance application/x-x509-ca-cert Requis pour EAP-TLS et EAP-TTLS Charge utile d'un seul certificat X.509v3 encodé en base64.
Clé EAP-TLS application/x-pkcs12 Requis pour EAP-TLS Structure ASN.1 PKCS #12 encodée en base64 contenant une chaîne de certificats client avec au moins le certificat client et la clé privée associée. Le conteneur PKCS 12, la clé privée et les certificats doivent tous être en texte clair, sans mot de passe.

La section "Profile" doit être transférée sous forme de texte XML encodé en base64 et en UTF-8, qui spécifie des parties des sous-arborescences HomeSP et Credential dans la spécification technique Passpoint R2 version 1.0.0, section 9.1.

Le nœud de premier niveau doit être MgmtTree et le sous-nœud immédiat doit être PerProviderSubscription. Un exemple de fichier XML est disponible dans Exemple de profil XML OMA-DM.

Les nœuds de sous-arborescence suivants sont utilisés sous HomeSP :

  • FriendlyName : doit être défini et utilisé comme texte à afficher
  • FQDN : obligatoire
  • RoamingConsortiumOI

Les nœuds de sous-arborescence suivants sont utilisés sous Credential :

  • Realm : doit être une chaîne non vide
  • UsernamePassword : obligatoire pour EAP-TTLS avec les nœuds suivants définis :

    • Username : chaîne contenant le nom d'utilisateur
    • Password : chaîne encodée en base64 (définie sur cGFzc3dvcmQ=, la chaîne encodée en base64 pour "password", dans l'exemple ci-dessous)
    • EAPMethod/EAPType : doit être défini sur 21
    • EAPMethod/InnerMethod : doit être défini sur PAP, CHAP, MS-CHAP ou MS-CHAP-V2.
  • DigitalCertificate : obligatoire pour EAP-TLS. Les nœuds suivants doivent être définis :

    • CertificateType défini sur x509v3
    • CertSHA256Fingerprint défini sur le condensé SHA-256 correct du certificat client dans la section MIME de la clé EAP-TLS
  • SIM : obligatoire pour EAP-SIM, EAP-AKA et EAP-AKA'. Le champ EAPType doit être défini sur le type EAP approprié, et IMSI doit correspondre à un IMSI de l'une des cartes SIM installées dans l'appareil au moment du provisionnement. La chaîne IMSI peut être entièrement composée de chiffres décimaux pour forcer une correspondance d'égalité complète, ou de cinq ou six chiffres décimaux suivis d'un astérisque (*) pour limiter la correspondance IMSI au code pays/code réseau mobile. Par exemple, la chaîne IMSI 123456* correspond à n'importe quelle carte SIM dont le MCC est 123 et le MNC est 456.

Android 11 introduit des fonctionnalités qui rendent le provisionnement Passpoint R1 plus flexible.

Nom de domaine distinct pour l'authentification, l'autorisation et la comptabilité (AAA)

Les administrateurs de réseau Passpoint qui ont besoin d'un nom de domaine AAA spécifié indépendamment du nom de domaine complet (FQDN) annoncé par le réseau via le protocole ANQP (Access Network Query Protocol) peuvent spécifier une liste de FQDN délimitée par des points-virgules dans un nouveau nœud sous l'arborescence Extension. Il s'agit d'un nœud facultatif. Les appareils équipés d'Android 10 ou version antérieure l'ignorent.

  • Android : sous-arborescence de l'extension Android

    • AAAServerTrustedNames : obligatoire pour les noms approuvés du serveur AAA avec les nœuds suivants définis :

      • FQDN : chaîne contenant les noms approuvés du serveur AAA. Utilisez des points-virgules pour séparer les noms approuvés. Par exemple, example.org;example.com.
Autorités de certification racine privées autosignées
Les administrateurs de réseau Passpoint qui gèrent leurs certificats en interne peuvent provisionner des profils avec une autorité de certification privée autosignée pour l'authentification AAA.
Autoriser l'installation de profils sans certificat d'autorité de certification racine
Le certificat de l'autorité de certification racine associé au profil est utilisé pour l'authentification du serveur AAA. Les administrateurs de réseau Passpoint qui souhaitent s'appuyer sur des autorités de certification racine publiques de confiance pour l'authentification de leur serveur AAA peuvent provisionner des profils sans certificat d'autorité de certification racine. Dans ce cas, le système vérifie les certificats du serveur AAA par rapport aux certificats CA racine publics installés dans le magasin de confiance.

Provisionnement Passpoint R2

Android 10 est compatible avec les fonctionnalités Passpoint R2. Passpoint R2 implémente l'inscription en ligne (OSU, Online Sign-Up), une méthode standard pour provisionner de nouveaux profils Passpoint. Android 10 et les versions ultérieures permettent le provisionnement de profils EAP-TTLS à l'aide du protocole SOAP-XML sur un ESS OSU ouvert.

Les fonctionnalités Passpoint R2 compatibles ne nécessitent que le code de référence AOSP (aucun pilote ni micrologiciel supplémentaires ne sont requis). Le code de référence AOSP inclut également une implémentation par défaut de l'UI Passpoint R2 dans l'application Paramètres.

Lorsqu'Android détecte un point d'accès Passpoint R2, le framework Android :

  1. Affiche la liste des fournisseurs de services annoncés par le point d'accès dans le sélecteur Wi-Fi (en plus des SSID).
  2. Invite l'utilisateur à appuyer sur l'un des fournisseurs de services pour configurer un profil Passpoint.
  3. Guide l'utilisateur tout au long de la procédure de configuration du profil Passpoint.
  4. Installe le profil Passpoint obtenu une fois l'opération terminée.
  5. S'associe au réseau Passpoint à l'aide du profil Passpoint nouvellement provisionné.

Fonctionnalités Passpoint R3

Android 12 introduit les fonctionnalités Passpoint R3 suivantes qui améliorent l'expérience utilisateur et permettent aux réseaux de se conformer aux lois locales :

Conditions d'utilisation

Dans certains lieux, l'acceptation des conditions d'utilisation est légalement requise pour accéder au réseau. Cette fonctionnalité permet aux déploiements réseau de remplacer les portails captifs non sécurisés, qui utilisent des réseaux ouverts, par un réseau Passpoint sécurisé. Une notification s'affiche pour l'utilisateur lorsqu'il doit accepter les conditions d'utilisation.

L'URL des conditions d'utilisation doit pointer vers un site Web sécurisé utilisant le protocole HTTPS. Si l'URL pointe vers un site Web non sécurisé, le framework se déconnecte immédiatement et bloque le réseau.

URL des informations sur le lieu

Permet aux opérateurs de réseau et aux établissements de fournir des informations supplémentaires à l'utilisateur, comme des plans, des annuaires, des promotions et des bons de réduction. Une notification s'affiche pour l'utilisateur lorsque le réseau est connecté.

L'URL des informations sur le lieu doit pointer vers un site Web sécurisé utilisant le protocole HTTPS. Si l'URL pointe vers un site Web non sécurisé, le framework l'ignore et n'affiche pas de notification.

Autres fonctionnalités Passpoint

Android 11 introduit les fonctionnalités Passpoint suivantes qui améliorent l'expérience utilisateur, la consommation d'énergie et la flexibilité du déploiement.

Application et notification de la date d'expiration
L'application de dates d'expiration aux profils permet au framework d'éviter la connexion automatique aux points d'accès dont les identifiants ont expiré, qui sont voués à l'échec. Cela évite l'utilisation du temps d'antenne et permet d'économiser la batterie et la bande passante du backend. Le framework affiche une notification à l'utilisateur lorsqu'un réseau correspondant à son profil est à portée et que le profil a expiré.
Plusieurs profils avec le même FQDN
Les opérateurs qui déploient des réseaux Passpoint et utilisent plusieurs ID de réseau mobile terrestre public (PLMN) peuvent provisionner plusieurs profils Passpoint avec le même nom de domaine complet (FQDN), un pour chaque ID PLMN, qui est automatiquement associé à la carte SIM installée et utilisé pour se connecter au réseau.

Android 12 introduit les fonctionnalités Passpoint suivantes qui améliorent l'expérience utilisateur, la consommation d'énergie et la flexibilité du déploiement :

Préfixe d'identité décoré
Lors de l'authentification auprès de réseaux avec une décoration de préfixe, le préfixe d'identité décoré permet aux opérateurs réseau de mettre à jour l'identifiant d'accès au réseau (NAI, Network Access Identifier) pour effectuer un routage explicite via plusieurs proxys à l'intérieur d'un réseau AAA (voir RFC 7542). Android 12 implémente cette fonctionnalité conformément à la spécification WBA pour les extensions PPS-MO.
Gestion de la désauthentification imminente
Permet aux opérateurs réseau de signaler à un appareil que le service n'est pas disponible pour l'identifiant utilisé pour l'authentification au réseau pendant une certaine durée (spécifiée par un délai d'expiration). Après avoir reçu ce signal, les appareils ne tenteront pas de se reconnecter au réseau avec les mêmes identifiants avant l'expiration du délai d'inactivité. En revanche, les appareils qui ne sont pas compatibles avec cette fonctionnalité peuvent tenter de se reconnecter au réseau de manière répétée pendant que le service est indisponible.

Exemples de profils XML OMA-DM PerProviderSubscription-MO

Profil avec un identifiant nom d'utilisateur/mot de passe (EAP-TTLS)

L'exemple suivant illustre un profil pour un réseau avec :

  • Le nom descriptif du réseau a été défini sur Example Network
  • Nom de domaine complet défini sur hotspot.example.net
  • OIs du consortium d'itinérance (pour l'itinérance)
  • Identifiants avec le nom d'utilisateur user, le mot de passe password encodé en Base64 et le domaine défini sur example.net
  • Méthode EAP définie sur 21 (EAP-TTLS)
  • Méthode interne de la phase 2 définie sur MS-CHAP-V2
  • Les noms de domaine AAA alternatifs ont été définis sur trusted.com et 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>

Profil avec un identifiant de certificat numérique (EAP-TLS)

L'exemple suivant illustre un profil pour un réseau avec :

  • Le nom descriptif du réseau a été défini sur GlobalRoaming
  • Nom de domaine complet défini sur globalroaming.net
  • OI du consortium d'itinérance (pour l'itinérance)
  • Domaine défini sur users.globalroaming.net
  • Identifiant avec un certificat numérique dont l'empreinte est spécifiée
<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>

Profil avec identifiant SIM (EAP-AKA)

L'exemple suivant illustre un profil pour un réseau avec :

  • Le nom descriptif du réseau a été défini sur Purple Passpoint
  • Nom de domaine complet défini sur wlan.mnc888.mcc999.3gppnetwork.org
  • Identifiant SIM avec l'ID PLMN 999888
  • Méthode EAP définie sur 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>

Avis d'authentification

Les appareils exécutant Android 8.x ou Android 9 avec un profil Passpoint R1 EAP-SIM, EAP-AKA ou EAP-AKA' ne se connecteront pas automatiquement au réseau Passpoint. Ce problème affecte les utilisateurs, les opérateurs et les services en réduisant le déchargement Wi-Fi.

Segment Conséquences Taille de l'impact
Opérateurs et fournisseurs de services Passpoint La charge sur le réseau mobile est plus importante. Tout opérateur utilisant Passpoint R1.
Utilisateurs Opportunité manquée de se connecter automatiquement aux points d'accès Wi-Fi de l'opérateur, ce qui entraîne des coûts de données plus élevés. Tout utilisateur disposant d'un appareil fonctionnant sur un réseau mobile compatible avec Passpoint R1.

Cause de l'échec

Passpoint spécifie un mécanisme permettant de faire correspondre un fournisseur de services (ANQP) annoncé à un profil installé sur l'appareil. Les règles de correspondance suivantes pour EAP-SIM, EAP-AKA et EAP-AKA' sont un ensemble partiel de règles axées sur les échecs 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.

Le deuxième critère a été modifié dans Android 8.0 :

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

Avec cette modification, le système n'a trouvé aucune correspondance pour les fournisseurs de services qui fonctionnaient auparavant. Les appareils Passpoint ne se sont donc pas connectés automatiquement.

Solutions

Pour contourner le problème des critères de correspondance modifiés, les opérateurs et les fournisseurs de services doivent ajouter le domaine de l'identifiant d'accès au réseau (NAI) aux informations publiées par le point d'accès Passpoint.

La solution recommandée consiste à ce que les fournisseurs de services réseau implémentent une solution de contournement côté réseau pour un déploiement le plus rapide possible. Une solution de contournement côté appareil dépend des OEM qui récupèrent une changelist (CL) depuis AOSP, puis mettent à jour les appareils sur le terrain.

Correction du réseau pour les opérateurs et les fournisseurs de services Passpoint

La solution de contournement côté réseau nécessite de reconfigurer le réseau pour ajouter l'élément ANQP du domaine NAI, comme spécifié ci-dessous. Les spécifications Passpoint ne nécessitent pas l'élément ANQP du domaine NAI, mais l'ajout de cette propriété est conforme aux spécifications Passpoint. Les implémentations client conformes aux spécifications ne devraient donc pas être interrompues.

  1. Ajoutez l'élément ANQP du domaine NAI.
  2. Définissez le sous-champ du domaine NAI pour qu'il corresponde à Realm du profil installé sur l'appareil.
  3. Définissez les informations suivantes en fonction de chaque type d'EAP :

    • EAP-TTLS : définissez EAPMethod(21) et les types d'authentification interne compatibles (PAP, CHAP, MS-CHAP ou MS-CHAP-V2).
    • EAP-TLS : définissez EAPMethod(13)
    • EAP-SIM : définissez EAPMethod(18)
    • EAP-AKA : définissez EAPMethod(23)
    • EAP-AKA' : définissez EAPMethod(50)

Correctif pour les appareils/AOSP pour les OEM

Pour implémenter une solution de contournement côté appareil, les OEM doivent choisir le CL de correctif aosp/718508. Ce correctif peut être appliqué aux versions suivantes (il ne s'applique pas à Android 10 ni aux versions ultérieures) :

  • Android 9
  • Android 8.x

Une fois le correctif sélectionné, les OEM doivent mettre à jour les appareils sur le terrain.