Вы можете использовать политику для настройки сетей 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
(автоматическая настройка прокси-сервера). - Необходимо выбрать
Type
WiFi
. Другие типы сетей не поддерживаются.
-
- Объекты
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 Framework этот префикс не требуется. - Чтобы задать режим рандомизации 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
,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" } ] }