Puedes usar políticas 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 de Chromium.
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 que un usuario configure manualmente los parámetros de 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 Open Network Configuration.
- Objeto de nivel superior:
- Se debe omitir
Type
o establecerlo enUnencryptedConfiguration
. 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 contraseñas y las claves privadas.
- Se debe omitir
- Objetos
NetworkConfiguration
:GUID
,Name
,Type
yWiFi
son campos admitidos y obligatorios.ProxySettings
es un campo opcional. Si se usa esta opción, solo se admitenManual
yPAC
(configuración automática de proxy).Type
debe establecerse enWiFi
. No se admiten otros tipos de redes.
- Objetos
WiFi
:- Se admiten
SSID
yHexSSID
, y debe estar presente al menos uno de ellos.- Si se configuran
HexSSID
ySSID
, los valores deben ser coherentes.
- Si se configuran
HiddenSSID
.AllowGatewayARPPolling
no es compatible.SignalStrength
no es compatible.AutoConnect
Si está habilitada, esta red se considerará como un posible candidato para conectarse durante la selección de red.Security
es obligatorio y se admiten los siguientes valores: - None - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
- Se admiten
- En el caso de las contraseñas de
WEP-PSK
, solo se admiten las de 40 bits (10 dígitos) o 104 bits (26 dígitos). - La especificación indica que las frases de contraseña
WEP-PSK
deben comenzar con el prefijo0x
. Sin embargo, para mantener la coherencia con el framework de Android, este prefijo no es obligatorio. - Para establecer el modo de aleatorización de MAC, usa la propiedad
MACAddressRandomizationMode
establecida con los valoresHardware
oAutomatic
. Esta propiedad no está disponible en la especificación de Open Network Configuration (ONC), pero se proporciona en la AMAPI y se puede especificar mientras se configuran 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 generadas aleatoriamente persistentes o no persistentes que se usan cuando se conecta a la red.
- Objetos
EAP
: ClientCertPattern
no es compatible.SaveCredentials
no se admite, 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
- Se admiten los siguientes valores para
Outer
:EAP-AKA
,EAP-TLS
,EAP-TTLS
,EAP-SIM
,PEAP
. - 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 de cliente y 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. Antes de Android 12, se informaba 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 del 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 de 192 bits de 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" } ] }