É possível usar a política para configurar redes Wi-Fi em um dispositivo. A API Management do Android usa a configuração de rede aberta, um formato padrão baseado em JSON que foi originalmente desenvolvido como parte do projeto Chromium. Consulte a especificação para conferir todos os detalhes sobre a configuração de rede aberta.
Para incluir uma configuração de rede aberta em uma política, defina o campo
openNetworkConfiguration
em um recurso
Policy
.
Para dispositivos totalmente gerenciados, você pode impedir que um usuário
configure manualmente as configurações de Wi-Fi no dispositivo definindo wifiConfigDisabled
como
true
no
recurso
Policy
.
Recursos compatíveis
A API Android Management oferece suporte apenas a um subconjunto da especificação de configuração de rede aberta.
- Objeto de nível superior:
Type
precisa ser omitido ou definido comoUnencryptedConfiguration
. Não é preciso criptografar a configuração de rede em uma política, porque toda a política é criptografada no serviço da API Android Management. Além disso, há uma segunda camada de criptografia para informações sensíveis, como senhas longas e chaves privadas.
- Objetos
NetworkConfiguration
:GUID
,Name
,Type
eWiFi
são campos com suporte e são obrigatórios.ProxySettings
é um campo opcional. Se esse recurso for usado, apenasManual
ePAC
(configuração automática de proxy) serão aceitos.Type
precisa ser definido comoWiFi
. Outros tipos de redes não são compatíveis.
- Objetos
WiFi
:SSID
eHexSSID
são aceitos, e pelo menos um deles precisa estar presente.- Se
HexSSID
eSSID
estiverem definidos, os valores precisarão ser consistentes.
- Se
HiddenSSID
é compatível.AllowGatewayARPPolling
não é compatível.SignalStrength
não é compatível.Security
é obrigatório, e os seguintes valores são aceitos: - Nenhum - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192- Para senhas de acesso
WEP-PSK
, apenas senhas de acesso de 40 bits (10 dígitos) ou 104 bits (26 dígitos) são aceitas. - A especificação determina que as frases de
WEP-PSK
precisam começar com o prefixo0x
. No entanto, para manter a consistência com o Android Framework, esse prefixo não é necessário. - Para definir o modo de randomização de MAC, use a propriedade
MACAddressRandomizationMode
definida com os valoresHardware
ouAutomatic
. No momento, essa propriedade não está disponível na especificação de configuração de rede aberta (ONC, na sigla em inglês), mas é fornecida na AMAPI e pode ser especificada ao configurar redes Wi-Fi. Isso se aplica apenas ao Android 13 e versões mais recentes em todos os modos de gerenciamento.- O
Hardware
usa o endereço MAC de fábrica ao se conectar à rede. - O
Automatic
permite que o framework Wi-Fi decida automaticamente a estratégia de geração aleatória de MAC. Podem ser endereços MAC persistentes ou não persistentes gerados aleatoriamente e usados durante a conexão à rede.
- O
- Objetos
EAP
:ClientCertPattern
não é compatível.SaveCredentials
não é compatível, porque as credenciais são sempre salvas.UseSystemCAs
não é compatível.ServerCARef
é compatível.ServerCARefs
é compatível.DomainSuffixMatch
é compatível. As configurações de rede sem fio corporativas sem esse campo (ou com uma lista vazia como valor) são consideradas inseguras e rejeitadas pela plataforma. Os valores precisam ser nomes de domínio válidos (por exemplo, "example.com", "subdomain.example.com").- Os seguintes valores são aceitos para
ClientCertType
:Ref
,KeyPairAlias
- Os seguintes valores são aceitos para
Inner
:MSCHAPv2
,PAP
- Os seguintes valores são aceitos para
Outer
:EAP-AKA
,EAP-TLS
,EAP-TTLS
,EAP-SIM
,PEAP
.
- Objetos
Certificate
:Remove
não é compatível. Omita o certificado na configuração.TrustBits
não é compatível.
Exemplos
Várias redes Wi-Fi
Este exemplo de fragmento de política mostra três redes Wi-Fi configuradas com
diferentes esquemas de segurança. O JSON da configuração de rede aberta está aninhado no
campo openNetworkConfiguration
do 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" } } ] }
Autenticação EAP
Este exemplo de fragmento de política mostra uma rede sem fio configurada com autenticação
EAP-TLS. Além do objeto NetworkConfigurations
, o exemplo
inclui dois objetos Certificates
para os certificados do cliente e do 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" } ] }
O campo ClientCertType
também pode ser definido como KeyPairAlias
, e o
campo ClientCertKeyPairAlias
pode ser usado para especificar o alias de um par de chaves KeyChain instalado
(consulte
DevicePolicyManager.installKeyPair
)
ou gerado (consulte
DevicePolicyManager.generateKeyPair
) que é usado para a autenticação do Wi-Fi. No Android 12 e
versões mais recentes, o par de chaves do KeyChain com o alias especificado com
ClientCertKeyPairAlias
é concedido para autenticação em redes Wi-Fi e é
usado para autenticação na rede Wi-Fi correspondente. No Android 12 e versões anteriores, um
nonComplianceDetail
com o motivo
API_LEVEL
é informado. Um
nonComplianceDetail
com
INVALID_VALUE
e
ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY
motivo específico é informado se o alias de par de chaves especificado não corresponder a
uma chave existente. Confira a seguir um exemplo 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" } ] }
O campo Security
também pode ser WPA3-Enterprise_192
, que é uma rede WPA-EAP
configurada com o 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" } ] }