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 для «пароля») -
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), объявленного сетью через протокол Access Network Query Protocol (ANQP), могут указать разделенный точкой с запятой список FQDN в новом узле в поддереве
Extension
. Это необязательный узел, и устройства под управлением Android версии 10 или ниже игнорируют этот узел.
Android
: поддерево расширений AndroidAAAServerTrustedNames
: требуется для доверенных имен сервера AAA со следующим набором узлов:-
FQDN
: Строка, содержащая доверенные имена сервера AAA. Используйте точку с запятой для разделения доверенных имен. Например,example.org;example.com
.
-
- Самоподписанные частные корневые центры сертификации
- Администраторы сети Passpoint, которые управляют своими сертификатами изнутри, могут предоставлять профили с помощью частного самоподписанного центра сертификации для аутентификации AAA.
- Разрешить установку профилей без сертификата корневого центра сертификации
- Сертификат Root CA, прикрепленный к профилю, используется для аутентификации сервера AAA. Администраторы сети Passpoint, которые хотят полагаться на общедоступные доверенные корневые центры сертификации для аутентификации своего сервера AAA, могут предоставлять профили без сертификата Root CA. В этом случае система проверяет сертификаты сервера AAA по общедоступным сертификатам Root CA, установленным в хранилище доверия.
Предоставление 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-адрес указывает на небезопасный веб-сайт, фреймворк игнорирует URL-адрес и не отображает уведомление.
Другие функции Passpoint
В Android 11 реализованы следующие возможности Passpoint, которые улучшают пользовательский интерфейс, энергопотребление и гибкость развертывания.
- Обеспечение соблюдения срока действия и уведомление
- Принудительное применение дат истечения срока действия профилей позволяет фреймворку избегать автоматического подключения к точкам доступа с просроченными учетными данными, которые обречены на сбой. Это предотвращает использование эфирного времени и экономит заряд батареи и пропускную способность бэкэнда. Фреймворк отображает уведомление пользователю, когда сеть, соответствующая его профилю, находится в зоне действия, а профиль истек.
- Несколько профилей с идентичным полным доменным именем
- Операторы, которые развертывают сети Passpoint и используют несколько идентификаторов сетей наземной мобильной связи общего пользования (PLMN), могут предоставлять несколько профилей Passpoint с одним и тем же полным доменным именем, по одному для каждого идентификатора 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
- Консорциум роуминга 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
- ОИ консорциума роуминга (для роуминга)
- Область установлена на
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-производителям необходимо обновить устройства на месте.