Passpoint — это протокол Wi-Fi Alliance (WFA) , который позволяет мобильным устройствам обнаруживать и аутентифицироваться в точках доступа Wi-Fi, предоставляющих доступ в Интернет.
Поддержка устройств
Для поддержки Passpoint производителям устройств необходимо реализовать интерфейс Supplicant. Начиная с Android 13, интерфейс использует AIDL для определения HAL. В версиях до Android 13 интерфейсы и разделы поставщиков используют HIDL. Файлы HIDL находятся в папке hardware/interfaces/supplicant/1.x
, а файлы AIDL — в папке hardware/interfaces/supplicant/aidl
. Supplicant обеспечивает поддержку стандарта 802.11u, в частности, функций обнаружения и выбора сети, таких как Generic Advertisement Service (GAS) и протокол запросов доступа к сети (ANQP).
Выполнение
Android 11 или выше
Для поддержки Passpoint на устройствах под управлением Android 11 и выше производители устройств должны обеспечить поддержку 802.11u в прошивке. Все остальные требования для поддержки Passpoint указаны в AOSP.
Android 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, запустите следующие модульные тесты пакета Passpoint:
Сервисные испытания:
atest com.android.server.wifi.hotspot2
Тесты менеджера:
atest android.net.wifi.hotspot2
Подготовка Passpoint 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, а также закрытый ключ и сертификаты должны быть представлены в виде открытого текста без пароля. |
Раздел Profile должен быть передан как 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 для «password») -
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 может состоять либо полностью из десятичных цифр для обеспечения полного соответствия, либо из 5 или 6 десятичных цифр, за которыми следует звёздочка (*), чтобы упростить сопоставление IMSI только с MCC/MNC. Например, строка IMSI 123456* соответствует любой SIM-карте с MCC 123 и MNC 456.
В Android 11 реализованы возможности, делающие настройку Passpoint R1 более гибкой.
- Отдельное доменное имя для аутентификации, авторизации и учета (AAA)
Администраторы сетей Passpoint, которым требуется доменное имя AAA, указанное независимо от полного доменного имени (FQDN), объявленного сетью через протокол доступа к сети (ANQP), могут указать список полных доменных имен, разделенных точкой с запятой, в новом узле в поддереве
Extension
. Это необязательный узел, и устройства под управлением Android версии 10 или ниже игнорируют его.
Android
: поддерево расширений AndroidAAAServerTrustedNames
: Требуется для доверенных имен сервера AAA со следующим набором узлов:-
FQDN
: строка, содержащая доверенные имена серверов AAA. Для разделения доверенных имен используйте точку с запятой. Например,example.org;example.com
.
-
- Самоподписанные частные корневые центры сертификации
- Администраторы сети Passpoint, которые управляют своими сертификатами изнутри, могут предоставлять профили с частным самоподписанным центром сертификации для аутентификации AAA.
- Разрешить установку профилей без сертификата корневого центра сертификации
- Сертификат корневого центра сертификации (CA), прикреплённый к профилю, используется для аутентификации сервера AAA. Администраторы сети Passpoint, желающие использовать общедоступные доверенные корневые центры сертификации (CA) для аутентификации сервера AAA, могут предоставлять профили без сертификата корневого центра сертификации. В этом случае система проверяет сертификаты сервера AAA на соответствие общедоступным сертификатам корневых центров сертификации, установленным в хранилище доверенных сертификатов.
Подготовка Passpoint 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:
- Отображает список поставщиков услуг, рекламируемых точкой доступа в средстве выбора 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 AP.
Поставщикам сетевых услуг рекомендуется реализовать обходной путь на уровне сети для скорейшего развертывания. Обходной путь на уровне устройства зависит от того, получат ли OEM-производители список изменений (CL) от AOSP и затем обновят устройства на месте.
Исправление проблем с сетью для операторов связи и поставщиков услуг Passpoint
Обходной путь на стороне сети требует перенастройки сети для добавления элемента ANQP области NAI, как указано ниже. Спецификации Passpoint не требуют элемента ANQP области NAI, но добавление этого свойства соответствует спецификациям Passpoint, поэтому реализации клиента, соответствующие спецификации, не должны нарушать работу.
- Добавьте элемент ANQP области NAI.
- Установите подполе области NAI в соответствии с
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 для OEM-производителей
Чтобы реализовать обходной путь на стороне устройства, OEM-производителям необходимо выбрать патч CL aosp/718508 . Этот патч можно применить поверх следующих версий (не применимо к Android 10 и выше):
- Андроид 9
- Андроид 8.x
После установки исправления OEM-производителям необходимо обновить устройства на месте.