Puedes usar la política para configurar redes Wi-Fi en un dispositivo. La API de Android Management usa Open Network Configuration, un formato estándar basado en JSON que se desarrolló originalmente como parte del proyecto Chromium. Consulta la especificación para obtener todos los detalles sobre la configuración de red abierta.
Para incluir una configuración de red abierta en una política, establece el campo openNetworkConfiguration
en un recurso Policy
.
En el caso de los dispositivos completamente administrados, puedes impedir de forma opcional que un usuario configure manualmente la configuración de Wi-Fi en su dispositivo. Para ello, establece wifiConfigDisabled
en true
en el recurso Policy
.
Funciones admitidas
La API de Android Management solo admite un subconjunto de la especificación de configuración de red abierta.
- Objeto de nivel superior:
- Se debe omitir
Type
o configurarlo comoUnencryptedConfiguration
. No es necesario encriptar la configuración de red dentro de una política, ya que toda la política está encriptada dentro del servicio de la API de Android Management. Además, hay una segunda capa de encriptación para la información sensible, como las frases de contraseña y las claves privadas.
- Se debe omitir
- Objetos
NetworkConfiguration
:GUID
,Name
,Type
yWiFi
son campos compatibles y obligatorios.ProxySettings
es un campo opcional. Si se usa, solo se admitenManual
yPAC
(configuración automática de proxy).- Se debe configurar
Type
comoWiFi
. No se admiten otros tipos de redes.
- Objetos
WiFi
:- Se admiten
SSID
yHexSSID
, y debe haber al menos uno de ellos.- Si se establecen
HexSSID
ySSID
, los valores deben ser coherentes.
- Si se establecen
HiddenSSID
.AllowGatewayARPPolling
no es compatible.SignalStrength
no es compatible.- Se requiere
Security
y se admiten los siguientes valores: - Ninguno - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192 - Para las frases de contraseña de
WEP-PSK
, solo se admiten frases de contraseña de 40 bits (10 dígitos) o 104 bits (26 dígitos). - La especificación indica que las frases de contraseña de
WEP-PSK
deben comenzar con el prefijo0x
. Sin embargo, para mantener la coherencia con el framework de Android, este prefijo no es obligatorio. - Para configurar el modo de aleatoriedad de MAC, usa la propiedad
MACAddressRandomizationMode
establecida con los valoresHardware
oAutomatic
. Actualmente, esta propiedad no está disponible en la especificación de configuración de red abierta (ONC), pero se proporciona en AMAPI y se puede especificar durante la configuración de redes Wi-Fi. Esto solo se aplica a Android 13 y versiones posteriores en todos los modos de administración.Hardware
usa la dirección MAC de fábrica cuando se conecta a la red.Automatic
permite que el framework de Wi-Fi decida automáticamente la estrategia de aleatorización de MAC. Pueden ser direcciones MAC persistentes o no persistentes generadas de forma aleatoria que se usan cuando se conecta a la red.
- Se admiten
- Objetos
EAP
:ClientCertPattern
no es compatible.SaveCredentials
no es compatible, ya que las credenciales siempre se guardan.UseSystemCAs
no es compatible.ServerCARef
.ServerCARefs
.DomainSuffixMatch
. Las configuraciones inalámbricas empresariales sin este campo (o con una lista vacía como valor) se consideran no seguras y la plataforma las rechaza. Los valores deben ser nombres de dominio válidos (p.ej., "example.com", "subdomain.example.com").- Se admiten los siguientes valores para
ClientCertType
:Ref
,KeyPairAlias
- Se admiten los siguientes valores para
Inner
:MSCHAPv2
,PAP
- Los siguientes valores son compatibles con
Outer
:EAP-AKA
,EAP-TLS
,EAP-TTLS
,EAP-SIM
yPEAP
.
- Objetos
Certificate
:Remove
no es compatible. En su lugar, omite el certificado en la configuración.TrustBits
no es compatible.
Ejemplos
Varias redes Wi-Fi
En este fragmento de política de ejemplo, se muestran tres redes Wi-Fi configuradas con diferentes esquemas de seguridad. El JSON de Open Network Configuration está anidado dentro del campo openNetworkConfiguration
del JSON de 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" } } ] }
Autenticación EAP
En este fragmento de política de ejemplo, se muestra una red inalámbrica configurada con autenticación EAP-TLS. Además del objeto NetworkConfigurations
, el ejemplo incluye dos objetos Certificates
para los certificados del cliente y del servidor.
"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" } ] }
El campo ClientCertType
también se puede establecer en KeyPairAlias
, y el campo ClientCertKeyPairAlias
se puede usar para especificar el alias de un par de claves de KeyChain instalado (consulta DevicePolicyManager.installKeyPair
) o generado (consulta DevicePolicyManager.generateKeyPair
) que se usa para la autenticación Wi-Fi. En Android 12 y versiones posteriores, el par de claves de KeyChain que tiene el alias especificado con ClientCertKeyPairAlias
se otorga para la autenticación en redes Wi-Fi y se usa para la autenticación en la red Wi-Fi correspondiente. En versiones anteriores a Android 12, se informa un nonComplianceDetail
con el motivo API_LEVEL
. Se informa un nonComplianceDetail
con el motivo INVALID_VALUE
y el motivo específico ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY
si el alias de par de claves especificado no corresponde a una clave existente. A continuación, se muestra un ejemplo de política:
"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" } ] }
El campo Security
también puede ser WPA3-Enterprise_192
, que es una red WPA-EAP configurada con el modo WPA3 de 192 bits.
"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" } ] }