Passpoint – это протокол Wi-Fi Alliance (WFA), который позволяет мобильным устройствам обнаруживать точки доступа Wi-Fi и проходить аутентификацию в них.
Поддержка устройств
Чтобы обеспечить поддержку Passpoint, производителям устройств необходимо реализовать интерфейс Supplicant. Начиная с Android 13, для определения HAL используется интерфейс AIDL.
В версиях ОС до Android 13 интерфейсы и разделы поставщика используют HIDL.
Файлы HIDL находятся в папке hardware/interfaces/supplicant/1.x, а файлы AIDL – в папке hardware/interfaces/supplicant/aidl.
Клиент поддерживает стандарт 802.11u, в частности функции обнаружения и выбора сети, такие как Generic Advertisement Service (GAS) и access network query protocol (ANQP).
Реализация
Реализация Passpoint зависит от версии Android.
Android 11 или более поздней версии.
Чтобы поддерживать Passpoint на устройствах с Android 11 или более поздней версии, производители должны обеспечить поддержку прошивки для 802.11u. Все остальные требования для поддержки Passpoint включены в AOSP.
Android 10 или более ранней версии
Для устройств с Android 10 или более ранней версией производители должны обеспечить поддержку фреймворка, HAL и встроенного ПО.
- Framework: Enable Passpoint (требуется флаг функции)
- Встроенное ПО: поддержка 802.11u.
Чтобы поддерживать Passpoint, реализуйте HAL Wi-Fi и включите флаг функции для 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, запустите следующие модульные тесты пакета Passpoint:
Проверки сервисов:
atest com.android.server.wifi.hotspot2Тесты управляющего аккаунта:
atest android.net.wifi.hotspot2Настройка Passpoint R1
Поддержка Passpoint R1 (выпуск 1) появилась в Android 6.0. Учетные данные Passpoint R1 можно получить, скачав из интернета специальный файл, содержащий информацию о профиле и учетных данных. Клиент автоматически запускает специальный установщик для информации о 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. Ниже перечислены части многокомпонентного контента.
| Part | Content-Type (без кавычек) | Обязательно | Описание |
|---|---|---|---|
| Профиль |
application/x-passpoint-profile
|
Всегда | Полезная нагрузка в формате OMA-DM SyncML, содержащая управляемый объект в формате Passpoint R1 для HomeSP и Credential.PerProviderSubscription |
| Доверенный сертификат |
application/x-x509-ca-cert
|
Требуется для EAP-TLS и EAP-TTLS. | Полезная нагрузка с одним сертификатом X.509v3 в кодировке Base64. |
| Ключ EAP-TLS |
application/x-pkcs12
|
Требуется для EAP-TLS | Структура ASN.1 PKCS #12 с кодировкой Base64, содержащая цепочку сертификатов клиента, в которой есть как минимум сертификат клиента и связанный с ним закрытый ключ. Контейнер PKCS 12, закрытый ключ и сертификаты должны быть в виде открытого текста без пароля. |
Раздел Profile должен быть передан в виде текста XML, закодированного в формате Base64 и UTF-8, в котором указаны части поддеревьев HomeSP и Credential в технической спецификации Passpoint R2 версии 1.0.0, раздел 9.1.
Узел верхнего уровня должен быть MgmtTree, а непосредственный дочерний узел – PerProviderSubscription. Пример XML-файла OMA-DM можно найти в разделе Пример профиля OMA-DM XML.
Под узлом HomeSP используются следующие узлы поддерева:
FriendlyName– обязательное поле, используется как отображаемый текст.FQDN: обязательный атрибутRoamingConsortiumOI
Под узлом Credential используются следующие узлы поддерева:
Realm: должна быть непустой строкой.UsernamePassword: требуется для EAP-TTLS со следующими заданными узлами:Username– строка, содержащая имя пользователя.Password– строка в кодировке Base64 (в примере ниже задано значениеcGFzc3dvcmQ=, которое является строкой в кодировке Base64 для слова password).EAPMethod/EAPType: должно быть задано значение21.EAPMethod/InnerMethod: должно быть установлено одно из следующих значений:PAP,CHAP,MS-CHAPилиMS-CHAP-V2.
DigitalCertificate: требуется для EAP-TLS. Необходимо задать следующие узлы:- Адрес "
x509v3" сохранен с ярлыком "CertificateType". CertSHA256Fingerprint, для которого задан правильный дайджест SHA-256 сертификата клиента в разделе MIME ключа EAP-TLS.
- Адрес "
SIM: требуется для EAP-SIM, EAP-AKA и EAP-AKA'. В полеEAPTypeдолжен быть указан подходящий тип EAP, а значениеIMSIдолжно совпадать с IMSI одной из SIM-карт, установленных в устройстве во время инициализации. Строка IMSI может состоять только из десятичных цифр, чтобы обеспечить полное совпадение, или из пяти или шести десятичных цифр, за которыми следует звездочка (*), чтобы ограничить совпадение IMSI только кодом страны и кодом сети. Например, строка IMSI123456*соответствует любой SIM-карте с кодом страны123и кодом сети456.
В Android 11 появились функции, которые делают инициализацию Passpoint R1 более гибкой.
- Отдельное доменное имя для аутентификации, авторизации и учета (AAA)
Администраторы сетей Passpoint, которым требуется доменное имя AAA, указанное независимо от полного доменного имени (FQDN), которое сеть сообщает через протокол ANQP, могут указать список FQDN, разделенных точкой с запятой, в новом узле поддерева
Extension. Это необязательный узел, и устройства с Android 10 или более ранней версии его игнорируют.Android: поддерево расширения AndroidAAAServerTrustedNames: требуется для доверенных имен серверов AAA со следующими заданными узлами:FQDN: строка, содержащая доверенные имена сервера AAA. Разделяйте доверенные имена точкой с запятой. Пример:example.org;example.com.
- Самозаверяющие корневые ЦС
Администраторы сетей Passpoint, которые управляют сертификатами внутри организации, могут предоставлять профили с частным самозаверяющим ЦС для аутентификации AAA.
- Разрешить установку профилей без сертификата ЦС
Корневой сертификат ЦС, прикрепленный к профилю, используется для аутентификации сервера AAA. Администраторы сетей Passpoint, которые хотят использовать общедоступные доверенные корневые центры сертификации для аутентификации серверов AAA, могут создавать профили без сертификата ЦС. В этом случае система проверяет сертификаты сервера AAA на соответствие общедоступным сертификатам корневого ЦС, установленным в хранилище доверенных сертификатов.
Инициализация Passpoint R2
В Android 10 добавлена поддержка функций Passpoint R2. В Passpoint R2 реализована онлайн-регистрация (OSU) – стандартный метод создания новых профилей Passpoint. Android 10 и более поздние версии поддерживают инициализацию профилей EAP-TTLS с помощью протокола SOAP-XML через открытую ESS OSU.
Для поддерживаемых функций Passpoint R2 требуется только справочный код AOSP (дополнительные драйверы или встроенное ПО не нужны). В справочный код AOSP также входит реализация интерфейса Passpoint R2 по умолчанию в приложении "Настройки".
Когда Android обнаруживает точку доступа Passpoint R2, фреймворк Android:
- Показывает список поставщиков услуг, рекламируемых ТД, в окне выбора сети Wi-Fi (в дополнение к SSID).
- Предлагает пользователю выбрать одного из поставщиков услуг, чтобы настроить профиль Passpoint.
- Помогает пользователю настроить профиль Passpoint.
- Устанавливает полученный профиль Passpoint после успешного завершения.
- Подключается к сети Passpoint с помощью нового профиля Passpoint.
Функции Passpoint R3
В Android 12 добавлены следующие функции Passpoint R3, которые повышают удобство использования и позволяют сетям соответствовать местным законам:
- Условия использования
В некоторых местах и заведениях для доступа к сети требуется принять условия использования. Эта функция позволяет заменить небезопасные страницы входа, которые используют открытые сети, на защищенную сеть Passpoint. Если пользователю нужно принять Условия использования, он увидит уведомление.
URL условий использования должен вести на защищенный сайт с протоколом HTTPS. Если URL указывает на небезопасный сайт, фреймворк немедленно отключается и блокирует сеть.
- URL страницы с информацией о месте проведения
Позволяет операторам сетей и владельцам помещений предоставлять пользователям дополнительную информацию, например карты помещений, каталоги, промоакции и купоны. При подключении к сети пользователь увидит уведомление.
URL информации о месте проведения должен вести на защищенный сайт с протоколом HTTPS. Если URL ведет на небезопасный сайт, фреймворк игнорирует его и не показывает уведомление.
Другие функции Passpoint
В Android 11 появились следующие возможности Passpoint, которые повышают удобство использования, снижают энергопотребление и делают развертывание более гибким.
- Применение срока действия и уведомления
- Установка срока действия профилей позволяет избежать автоматического подключения к точкам доступа с учетными данными, срок действия которых истек. Это позволяет экономить эфирное время, заряд батареи и пропускную способность. Когда в зоне действия появляется сеть, соответствующая профилю, срок действия которого истек, фреймворк показывает пользователю уведомление.
- Несколько профилей с одинаковым полным доменным именем
- Операторы, которые развертывают сети Passpoint и используют несколько идентификаторов общедоступной наземной мобильной сети (PLMN), могут предоставлять несколько профилей Passpoint с одним и тем же полным доменным именем (FQDN), по одному для каждого идентификатора PLMN. Эти профили автоматически сопоставляются с установленной SIM-картой и используются для подключения к сети.
В Android 12 появились следующие возможности Passpoint, которые повышают удобство использования, энергоэффективность и гибкость развертывания:
- Префикс идентификатора
- При аутентификации в сетях с префиксом декорации декорированный префикс идентификатора позволяет операторам сети обновлять идентификатор доступа к сети (NAI), чтобы выполнять явную маршрутизацию через несколько прокси-серверов в сети AAA (см. RFC 7542). В Android 12 эта функция реализована в соответствии с спецификацией WBA для расширений PPS-MO.
- Обработка скорой деаутентификации
- Позволяет операторам сети сообщать устройству, что сервис недоступен для учетных данных, используемых для аутентификации в сети, в течение определенного времени (указанного с помощью задержки тайм-аута). После получения этого сигнала устройства не будут пытаться повторно подключиться к сети с теми же учетными данными, пока не истечет время ожидания. Устройства, которые не поддерживают эту функцию, могут пытаться повторно подключиться к сети, пока сервис недоступен.
Примеры XML-профилей OMA-DM PerProviderSubscription-MO
Профиль с учетными данными (именем пользователя и паролем) (EAP-TTLS)
В следующем примере показан профиль сети со следующими параметрами:
- Задано понятное название сети:
Example Network. - Полное доменное имя установлено на
hotspot.example.net. - Объекты информации консорциума по роумингу (для роуминга)
- Учетные данные с именем пользователя
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. - Идентификаторы организации консорциума роуминга (для роуминга)
- Область задана как
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. |
| Пользователи | Устройство не подключается автоматически к точкам доступа Wi-Fi оператора, что приводит к увеличению расходов на передачу данных. | Любой пользователь с устройством, которое работает в сети оператора, поддерживающей 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.
Рекомендуем поставщикам сетевых услуг реализовать обходное решение на стороне сети, чтобы обеспечить максимально быстрое развертывание. Обходное решение на стороне устройства зависит от того, примет ли производитель оборудования список изменений из AOSP и обновит ли устройства.
Исправление сети для операторов связи и поставщиков услуг Passpoint
Чтобы устранить проблему на стороне сети, необходимо перенастроить сеть и добавить элемент ANQP области NAI, как описано ниже. Спецификации Passpoint не требуют наличия элемента ANQP области NAI, но добавление этого свойства соответствует спецификациям Passpoint, поэтому совместимые с ними клиентские реализации не должны нарушаться.
- Добавьте элемент ANQP для области NAI.
- Задайте для подполя NAI realm значение, соответствующее
Realmпрофиля, установленного на устройстве. - Укажите следующую информацию в зависимости от типа 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).
- EAP-TTLS: задайте значение
Исправление для устройств и AOSP для производителей оригинального оборудования
Чтобы реализовать обходное решение на стороне устройства, производителям оборудования необходимо выбрать исправление CL aosp/718508. Это исправление можно применить к следующим выпускам (не относится к Android 10 и более поздним версиям):
- Android 9
- Android 8.x
После того как исправление будет выбрано, производителям оригинального оборудования нужно будет обновить устройства.