Точка доступа (точка доступа 2.0)

Passpoint — это протокол Wi-Fi Alliance (WFA) , который позволяет мобильным устройствам обнаруживать и аутентифицировать точки доступа Wi-Fi, обеспечивающие доступ в Интернет.

Поддержка устройств

Для поддержки Passpoint производителям устройств необходимо реализовать hardware/interfaces/wifi/supplicant/1.0 или выше. Язык проектирования интерфейса Wi-Fi HAL (HIDL) , предоставленный в Android Open Source Project (AOSP), определяет HAL для запрашивающей стороны. Запрашивающая сторона обеспечивает поддержку стандарта 802.11u, в частности функции обнаружения и выбора сети, такие как общая служба рекламы (GAS) и протокол сетевых запросов доступа (ANQP).

Реализация

Андроид 11 или выше

Для поддержки Passpoint на устройствах под управлением Android 11 или более поздней версии производителям устройств необходимо предоставить встроенное ПО для поддержки 802.11u. Все остальные требования для поддержки Passpoint включены в AOSP.

Андроид 10 или ниже

Для устройств под управлением Android 10 или более ранней версии производители устройств должны предоставить поддержку как платформы, так и HAL/прошивки:

  • Framework: включить 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/tests/google/wifi/WifiPasspointTest.py , реализует набор функциональных тестов.

Подготовка точки доступа R1

Android поддерживает Passpoint R1, начиная с Android 6.0, что позволяет предоставлять учетные данные Passpoint R1 (версия 1) путем загрузки из Интернета специального файла, содержащего информацию о профиле и учетных данных. Клиент автоматически запускает специальный установщик для информации о Wi-Fi и позволяет пользователю просматривать части информации, прежде чем принять или отклонить контент.

Информация о профиле, содержащаяся в файле, используется для сопоставления с данными, полученными от точек доступа с поддержкой Passpoint, а учетные данные автоматически применяются для любой сопоставленной сети.

Эталонная реализация Android поддерживает EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA и EAP-AKA.

Механизм загрузки

Файл конфигурации Passpoint должен размещаться на веб-сервере и должен быть защищен с помощью TLS (HTTPS), поскольку он может содержать открытый текстовый пароль или данные закрытого ключа. Содержимое состоит из обернутого составного текста MIME, представленного в UTF-8 и закодированного в кодировке base64 в соответствии с разделом 6.8 RFC-2045.

Следующие поля заголовка 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-Type multipart/mixed . Следующие части составляют отдельные части составного содержимого.

Часть Content-Type (без кавычек) Необходимый Описание
Профиль application/x-passpoint-profile Всегда Полезная нагрузка в формате OMA-DM SyncML, содержащая MO в формате Passpoint R1 PerProviderSubscription для HomeSP и Credential .
Доверительный сертификат application/x-x509-ca-cert Требуется для EAP-TLS и EAP-TTLS Одна полезная нагрузка сертификата X.509v3 в кодировке base64.
EAP-TLS-ключ application/x-pkcs12 Требуется для EAP-TLS Структура PKCS #12 ASN.1 в кодировке base64, содержащая цепочку клиентских сертификатов, по крайней мере, с клиентским сертификатом и соответствующим закрытым ключом. Контейнер PKCS 12, а также закрытый ключ и сертификаты должны быть в виде открытого текста без пароля.

Раздел «Профиль» должен быть передан в виде XML-текста в кодировке base64 и UTF-8, который определяет части поддеревьев HomeSP и Credential в технической спецификации Passpoint R2 версии 1.0.0, раздел 9.1.

Узел верхнего уровня должен быть 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 : Должен быть установлен один из PAP , CHAP , MS-CHAP или MS-CHAP-V2
  • DigitalCertificate : требуется для EAP-TLS. Должны быть установлены следующие узлы:

    • Тип CertificateType установлен на x509v3
    • CertSHA256Fingerprint задан правильный дайджест SHA-256 сертификата клиента в разделе MIME ключа EAP-TLS.
  • SIM : требуется для EAP-SIM, EAP-AKA и EAP-AKA. В поле EAPType должен быть указан соответствующий тип EAP, а IMSI должен совпадать с IMSI одной из SIM-карт, установленных в устройстве во время подготовки. Строка IMSI может состоять либо полностью из десятичных цифр, чтобы обеспечить полное совпадение равенства, либо из нуля или более десятичных цифр, за которыми следует звездочка (*), чтобы уменьшить соответствие IMSI только префиксу. Например, строка IMSI 123* соответствует любой SIM-карте с IMSI, начинающимся с 123.

В Android 11 представлены возможности, которые делают подготовку Passpoint R1 более гибкой.

Отдельное доменное имя для аутентификации, авторизации и учета (AAA)

Сетевые администраторы Passpoint, которым требуется доменное имя AAA, указанное независимо от полного доменного имени (FQDN), объявленного сетью через протокол сетевых запросов доступа (ANQP), могут указать список полных доменных имен, разделенных точкой с запятой, в новом узле в поддереве Extension . . Это необязательный узел, и устройства под управлением Android версии 10 или ниже игнорируют этот узел.

  • Android : поддерево расширений Android

    • AAAServerTrustedNames : требуется для доверенных имен сервера AAA со следующим набором узлов:

      • FQDN : строка, содержащая доверенные имена серверов AAA. Используйте точку с запятой для разделения доверенных имен. Например, example.org;example.com .
Самоподписанные частные корневые центры сертификации
Сетевые администраторы Passpoint, которые управляют своими сертификатами внутренне, могут предоставлять профили с частным самозаверяющим ЦС для аутентификации AAA.
Разрешить установку профилей без сертификата Root CA
Сертификат корневого ЦС, прикрепленный к профилю, используется для проверки подлинности сервера AAA. Сетевые администраторы Passpoint, которые хотят полагаться на общедоступные доверенные корневые центры сертификации для аутентификации своих серверов AAA, могут создавать профили без сертификата корневого центра сертификации. В этом случае система сверяет сертификаты сервера AAA с общедоступными корневыми сертификатами CA, установленными в хранилище доверенных сертификатов.

Подготовка точки доступа R2

В Android 10 появилась поддержка функций Passpoint R2. В Passpoint R2 реализована онлайн-регистрация (OSU) — стандартный метод предоставления новых профилей Passpoint. Android 10 и выше поддерживает подготовку профилей EAP-TTLS с использованием протокола SOAP-XML через открытый OSU ESS.

Для поддерживаемых функций Passpoint R2 требуется только эталонный код AOSP, дополнительный драйвер или встроенное ПО не требуется). Справочный код AOSP также включает стандартную реализацию пользовательского интерфейса Passpoint R2 в приложении «Настройки».

Когда Android обнаруживает точку доступа Passpoint R2, платформа Android:

  1. Отображает список поставщиков услуг, объявленных точкой доступа в средстве выбора Wi-Fi (в дополнение к отображению идентификаторов SSID).
  2. Предлагает пользователю выбрать одного из поставщиков услуг, чтобы настроить профиль Passpoint.
  3. Проводит пользователя через процесс настройки профиля Passpoint.
  4. Устанавливает полученный профиль Passpoint после успешного завершения.
  5. Связывается с сетью Passpoint, используя только что созданный профиль Passpoint.

Функции Passpoint R3

В Android 12 представлены следующие функции Passpoint R3, которые улучшают взаимодействие с пользователем и позволяют сетям соответствовать местным законам:

Условия и положения

Принятие условий требуется по закону в некоторых местах и ​​местах для предоставления доступа к сети. Эта функция позволяет при развертывании сети заменить небезопасные авторизованные порталы, использующие открытые сети, на безопасную сеть Passpoint. Уведомление отображается для пользователя, когда необходимо принять положения и условия.

URL-адрес условий и положений должен указывать на безопасный веб-сайт, использующий HTTPS. Если URL-адрес указывает на небезопасный веб-сайт, платформа немедленно отключается и блокирует сеть.

URL-адрес информации о месте проведения

Позволяет сетевым операторам и площадкам предоставлять пользователю дополнительную информацию, такую ​​как карты мест проведения, каталоги, рекламные акции и купоны. Уведомление отображается для пользователя, когда сеть подключена.

URL-адрес информации о месте проведения должен указывать на безопасный веб-сайт, использующий HTTPS. Если URL-адрес указывает на небезопасный веб-сайт, платформа игнорирует URL-адрес и не отображает уведомление.

Другие функции точки доступа

В Android 11 представлены следующие возможности Passpoint, которые улучшают взаимодействие с пользователем, энергопотребление и гибкость развертывания.

Исполнение срока действия и уведомление
Применение сроков действия для профилей позволяет платформе избежать автоматического подключения к точкам доступа с просроченными учетными данными, которые обречены на сбой. Это предотвращает использование эфирного времени и экономит заряд батареи и пропускную способность серверной части. Платформа отображает уведомление пользователю, когда сеть, соответствующая его профилю, находится в пределах досягаемости, а срок действия профиля истек.
Несколько профилей с одинаковым полным доменным именем
Операторы связи, развертывающие сети Passpoint и использующие несколько идентификаторов наземных мобильных сетей общего пользования (PLMN), могут предоставлять несколько профилей Passpoint с одним и тем же полным доменным именем, по одному для каждого идентификатора PLMN, который автоматически сопоставляется с установленной SIM-картой и используется для подключения к сети.

В Android 12 представлены следующие возможности Passpoint, которые улучшают взаимодействие с пользователем, энергопотребление и гибкость развертывания:

Украшенный идентификационный префикс
При аутентификации в сетях с оформлением префикса декорированный префикс идентификации позволяет сетевым операторам обновлять идентификатор доступа к сети (NAI) для выполнения явной маршрутизации через несколько прокси-серверов внутри сети AAA (см. RFC 7542 ). Android 12 реализует эту функцию согласно спецификации WBA для расширений PPS-MO .
Неизбежная обработка деаутентификации
Позволяет сетевым операторам сообщать устройству, что служба недоступна для учетных данных, используемых для аутентификации в сети, в течение определенного времени (указывается через задержку тайм-аута). После получения этого сигнала устройства не будут пытаться повторно подключиться к сети с теми же учетными данными, пока не истечет время ожидания. Напротив, устройства, не поддерживающие эту функцию, могут пытаться неоднократно повторно подключаться к сети, пока служба недоступна.

Примеры XML-профилей PerProviderSubscription-MO OMA-DM

Профиль с учетными данными имени пользователя и пароля (EAP-TTLS)

В следующем примере демонстрируется профиль для сети с:

  • Имя, понятное для сети, задано как Example Network
  • Полное доменное имя указано как 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
  • Полное доменное имя установлено на globalroaming.net
  • OI Roaming Consortium (для роуминга)
  • 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
  • Полное доменное имя установлено на wlan.mnc888.mcc999.3gppnetwork.org
  • Учетные данные SIM-карты с идентификатором PLMN 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.
Пользователи Упущенная возможность автоматического подключения к точкам доступа Carrier Wi-Fi (AP), что приводит к увеличению затрат на передачу данных. Любой пользователь с устройством, работающим в сети оператора, поддерживающим Passpoint R1.

Причина отказа

Точка доступа определяет механизм сопоставления рекламируемого (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.

Рекомендуемое решение для поставщиков сетевых услуг — реализовать обходной путь на стороне сети для максимально быстрого развертывания. Обходной путь на стороне устройства зависит от OEM-производителей, получающих список изменений (CL) от AOSP, а затем обновляющих устройства в полевых условиях.

Исправление сети для операторов связи и поставщиков услуг Passpoint

Обходной путь на стороне сети требует перенастройки сети для добавления элемента ANQP области NAI, как указано ниже. Спецификации Passpoint не требуют наличия элемента ANQP области NAI, но добавление этого свойства соответствует спецификациям Passpoint, поэтому клиентские реализации, соответствующие спецификациям, не должны ломаться.

  1. Добавьте элемент ANQP области NAI.
  2. Установите подполе Realm NAI в соответствии с Realm профиля, установленного на устройстве.
  3. Установите следующую информацию для каждого типа EAP:

    • EAP-TTLS: Установите EAPMethod(21) и поддерживаемые внутренние типы аутентификации ( PAP , CHAP , MS-CHAP или MS-CHAP-V2 )
    • EAP-TLS: Установить EAPMethod(13)
    • EAP-SIM: Установить EAPMethod(18)
    • EAP-AKA: Установить EAPMethod(23)
    • EAP-AKA': Установить EAPMethod(50)

Исправление устройства/AOSP для OEM-производителей

Чтобы реализовать обходной путь на стороне устройства, OEM-производителям необходимо выбрать исправление CL aosp/718508 . Этот патч можно применять поверх следующих выпусков (не относится к Android 10 и выше):

  • Андроид 9
  • Андроид 8.х

Когда исправление установлено, OEM-производителям необходимо обновить устройства в полевых условиях.