Вы можете использовать политику для настройки сетей 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
:-
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
не поддерживается. - Поддерживается
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"
],
"ServerCARef": "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"
],
"ServerCARef": "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",
"ServerCARef": "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"
}
]
}