Вы можете использовать политику для настройки сетей 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
(Proxy Auto-Configuration). -
Type
должен быть установлен наWiFi
. Другие типы сетей не поддерживаются.
- Поддерживаемые поля
- Объекты
WiFi
:- Поддерживаются
SSID
иHexSSID
, и по крайней мере один из них должен присутствовать.- Если заданы оба
HexSSID
иSSID
, значения должны быть согласованными.
- Если заданы оба
- Поддерживается
HiddenSSID
. -
AllowGatewayARPPolling
не поддерживается. -
SignalStrength
не поддерживается. - Если
AutoConnect
включена, эта сеть будет рассматриваться как потенциальный кандидат на подключение при выборе сети. - Требуется
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 Open Network Configuration вложен в поле 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, настроенную в режиме WPA3 192-бит.
"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" } ] }