Вы можете использовать политику для настройки сетей Wi-Fi на устройстве. API управления Android использует конфигурацию открытой сети, стандартный формат на основе JSON, который изначально был разработан как часть проекта Chromium. Подробную информацию о конфигурации открытой сети см. в спецификации .
Чтобы включить конфигурацию открытой сети в политику, установите поле openNetworkConfiguration
в ресурсе Policy
.
Для полностью управляемых устройств вы можете дополнительно запретить пользователю вручную настраивать параметры Wi-Fi на своем устройстве, установив для wifiConfigDisabled
значение true
в ресурсе Policy
.
Поддерживаемые функции
API управления Android поддерживает только часть спецификации конфигурации открытой сети.
- Объект верхнего уровня:
-
Type
необходимо опустить или установить значениеUnencryptedConfiguration
. Нет необходимости шифровать конфигурацию сети в политике, поскольку вся политика зашифрована в службе API управления Android. Кроме того, существует второй уровень шифрования конфиденциальной информации, такой как парольные фразы и закрытые ключи.
-
- Объекты
NetworkConfiguration
:- Поля
GUID
,Name
,Type
иWiFi
поддерживаются и являются обязательными. -
ProxySettings
— необязательное поле. Если это используется, поддерживаются толькоManual
иPAC
(автоматическая настройка прокси). -
Type
должен быть установлен наWiFi
. Другие типы сетей не поддерживаются.
- Поля
- Объекты
WiFi
:- Поддерживаются
SSID
иHexSSID
, и хотя бы один из них должен присутствовать.- Если установлены и
HexSSID
, иSSID
, значения должны совпадать.
- Если установлены и
- Поддерживается
HiddenSSID
. -
AllowGatewayARPPolling
не поддерживается. -
SignalStrength
не поддерживается. - Требуется
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
. Это свойство в настоящее время недоступно в спецификации конфигурации открытой сети (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" } ] }