Для настройки сетей Wi-Fi на устройстве можно использовать политики. API управления Android использует Open Network Configuration, стандартный формат на основе JSON, первоначально разработанный в рамках проекта Chromium.
Чтобы включить конфигурацию открытой сети в политику, установите поле openNetworkConfiguration в ресурсе Policy .
Для устройств, находящихся под полным управлением, можно дополнительно запретить пользователю вручную настраивать параметры Wi-Fi на своем устройстве, установив параметр wifiConfigDisabled в true в ресурсе Policy .
Поддерживаемые функции
API управления Android поддерживает лишь часть спецификации Open Network Configuration.
- Объект верхнего уровня:
-
Typeследует опустить или установить значениеUnencryptedConfiguration. Нет необходимости шифровать сетевую конфигурацию в рамках политики, поскольку вся политика шифруется внутри службы Android Management API. Кроме того, существует второй уровень шифрования для конфиденциальной информации, такой как парольные фразы и закрытые ключи.
-
- Объекты
NetworkConfiguration:- Поддерживаются поля
GUID,Name,TypeиWiFi, и все они обязательны для заполнения. - Поле
ProxySettingsявляется необязательным. Если оно используется, поддерживаются толькоManualиPAC(автоматическая настройка прокси). - Для подключения необходимо выбрать
TypeWiFi. Другие типы сетей не поддерживаются.
- Поддерживаются поля
- Объекты
WiFi:- Поддерживаются
SSIDиHexSSID, при этом должен присутствовать хотя бы один из них.- Если заданы и
HexSSID, иSSID, значения должны совпадать.
- Если заданы и
-
HiddenSSIDподдерживается. -
AllowGatewayARPPollingне поддерживается. -
SignalStrengthне поддерживается. -
AutoConnect: В этом поле определяется, будет ли сеть автоматически включена. Этот параметр не зависит от опции автоматического подключения для каждой сети, доступной пользователям в настройках Wi-Fi устройства.- Если установлено значение
true, сеть включена, то есть устройство может автоматически подключаться к ней без явного выбора пользователем в настройках Wi-Fi, если только пользователь не отключит автоматическое подключение для этой сети. - Если установлено значение
false, сеть добавляется в список сохраненных сетей, но не активируется. Устройство не подключается к ней автоматически. Для подключения устройства к сети пользователю необходимо один раз вручную выбрать сеть в настройках Wi-Fi. После первого ручного подключения сеть считается активной, и устройство может подключаться к ней автоматически, если пользователь не отключит автоматическое подключение для этой сети.
- Если установлено значение
- Требуется
Security, поддерживаются следующие значения: - Нет - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
- Поддерживаются
- Для паролей
WEP-PSKподдерживаются только 40-битные (10-значные) или 104-битные (26-значные) пароли. - В спецификации указано, что парольные фразы
WEP-PSKдолжны начинаться с префикса0x. Однако для обеспечения согласованности с фреймворком Android этот префикс не является обязательным. - Для установки режима рандомизации MAC-адресов используйте свойство
MACAddressRandomizationModeсо значениямиHardwareилиAutomatic. Это свойство недоступно в спецификации Open Network Configuration (ONC) , но предоставляется в AMAPI и может быть указано при настройке сетей Wi-Fi. Это относится только к Android 13+ во всех режимах управления.- При подключении к сети
Hardwareиспользует заводской MAC-адрес. - В режиме
Automaticплатформа Wi-Fi автоматически определяет стратегию рандомизации MAC-адресов. Это могут быть как постоянные, так и непостоянные случайно сгенерированные MAC-адреса, используемые при подключении к сети.
- При подключении к сети
- Объекты
EAP: -
ClientCertPatternне поддерживается. -
SaveCredentialsне поддерживается, поскольку учетные данные всегда сохраняются. -
UseSystemCAsне поддерживается. - Поддержка
ServerCARefимеется. -
ServerCARefsподдерживается. - Поддерживается
DomainSuffixMatch. Конфигурации корпоративных беспроводных сетей без этого поля (или с пустым списком значений) считаются небезопасными и отклоняются платформой . Значения должны быть допустимыми доменными именами (например, "example.com", "subdomain.example.com"). - Для
ClientCertTypeподдерживаются следующие значения:Ref,KeyPairAlias - Для
Innerподдерживаются следующие значения:MSCHAPv2,PAP - Для
Outerподдерживаются следующие значения:EAP-AKA,EAP-TLS,EAP-TTLS,EAP-SIM,EAP-PWD,PEAP - Объекты
Certificate:-
Removeне поддерживается. Вместо этого опустите сертификат в конфигурации. -
TrustBitsне поддерживается.
-
Примеры
Несколько сетей Wi-Fi
В этом примере фрагмента политики показаны три сети Wi-Fi, настроенные с использованием различных схем безопасности. JSON-файл конфигурации открытой сети вложен в поле openNetworkConfiguration JSON-файла Policy .
"openNetworkConfiguration": {
"NetworkConfigurations": [
{
"GUID": "a",
"Name": "Example A",
"Type": "WiFi",
"WiFi": {
"SSID": "Example A",
"Security": "None",
"AutoConnect": true
}
},
{
"GUID": "b",
"Name": "Example B",
"Type": "WiFi",
"WiFi": {
"SSID": "Example B",
"Security": "WEP-PSK",
"Passphrase": "1234567890"
}
},
{
"GUID": "c",
"Name": "Example C",
"Type": "WiFi",
"WiFi": {
"SSID": "Example C",
"Security": "WPA-PSK",
"Passphrase": "baseball"
}
},
{
"GUID": "networkA",
"Name": "networkA",
"Type": "WiFi",
"WiFi": {
"SSID": "networkA",
"Security": "WPA-PSK",
"Passphrase": "pwd1234567",
"MACAddressRandomizationMode": "Hardware"
}
}
]
}Аутентификация EAP
В этом примере показана беспроводная сеть, настроенная с использованием аутентификации EAP-TLS. Помимо объекта NetworkConfigurations , пример включает два объекта Certificates для клиентских и серверных сертификатов.
"openNetworkConfiguration": {
"Type": "UnencryptedConfiguration",
"NetworkConfigurations": [
{
"GUID": "a",
"Name": "Example A",
"Type": "WiFi",
"WiFi": {
"SSID": "Example A",
"EAP": {
"Outer": "EAP-TLS",
"Identity": "example",
"DomainSuffixMatch": [
"example.com",
"example.org"
],
"ServerCARefs": ["abc123"],
"ClientCertType": "Ref",
"ClientCertRef": "xyz456"
},
"Security": "WPA-EAP"
}
}
],
"Certificates": [
{
"GUID": "abc123",
"Type": "Server",
"X509": "TWFuIGlzIGRpc3Rpbmd1a"
},
{
"GUID": "xyz456",
"Type": "Client",
"PKCS12": "6PQIEQYJKoZbdDu8gwggRlqCCAPEbAAcGClgvcNAQc"
}
]
} Поле ClientCertType также может быть установлено в значение KeyPairAlias , а поле ClientCertKeyPairAlias может использоваться для указания псевдонима установленной (см. DevicePolicyManager.installKeyPair ) или сгенерированной (см. DevicePolicyManager.generateKeyPair ) пары ключей KeyChain, используемой для аутентификации в сетях Wi-Fi. В Android 12 и более новых версиях пара ключей KeyChain с псевдонимом, указанным в ClientCertKeyPairAlias , предоставляется для аутентификации в сетях Wi-Fi и используется для аутентификации в соответствующей сети Wi-Fi. До Android 12 сообщалось о nonComplianceDetail с причиной API_LEVEL . Сообщалось nonComplianceDetail с причиной INVALID_VALUE и причиной ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY , если указанный псевдоним пары ключей не соответствует существующему ключу. Ниже приведен пример политики:
"openNetworkConfiguration": {
"Type": "UnencryptedConfiguration",
"NetworkConfigurations": [
{
"GUID": "a",
"Name": "Example A",
"Type": "WiFi",
"WiFi": {
"SSID": "Example A",
"EAP": {
"Outer": "EAP-TLS",
"Identity": "example",
"DomainSuffixMatch": [
"example.com",
"example.org"
],
"ServerCARefs": ["abc123"],
"ClientCertType": "KeyPairAlias",
"ClientCertKeyPairAlias": "key-alias"
},
"Security": "WPA-EAP"
}
}
],
"Certificates": [
{
"GUID": "abc123",
"Type": "Server",
"X509": "TWFuIGlzIGRpc3Rpbmd1a"
}
]
} В поле Security также может быть указано значение WPA3-Enterprise_192 , что означает сеть WPA-EAP, настроенную в 192-битном режиме WPA3.
"openNetworkConfiguration": {
"Type": "UnencryptedConfiguration",
"NetworkConfigurations": [
{
"Type": "WiFi",
"Name": "Example A",
"GUID": "A",
"WiFi": {
"SSID": "Example A",
"EAP": {
"Outer": "EAP-TLS",
"Identity": "example",
"ServerCARefs": ["abc123"],
"ClientCertType": "Ref",
"ClientCertRef": "xyz456",
"DomainSuffixMatch": ["example.com"]
},
"Security": "WPA3-Enterprise_192",
"AutoConnect": true
}
}
],
"Certificates": [
{
"GUID": "abc123",
"Type": "Server",
"X509": "TWFuIGlzIGRpc3Rpbmd1a"
},
{
"GUID": "xyz456",
"Type": "Client",
"PKCS12": "6PQIEQYJKoZbdDu8gwggRlqCCAPEbAAcGClgvcNAQc"
}
]
}