Configurar redes

Você pode usar uma política para configurar redes Wi-Fi em um dispositivo. A API Android Management usa o Open Network Configuration, um formato padrão baseado em JSON que foi originalmente desenvolvido como parte do projeto Chromium.

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 é compatível apenas com um subconjunto da especificação Open Network Configuration.

  • Objeto de nível superior:
    • Type precisa ser omitido ou definido como UnencryptedConfiguration. Não é necessário 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 e chaves privadas.
  • Objetos NetworkConfiguration:
    • GUID, Name, Type e WiFi são campos aceitos e obrigatórios.
    • ProxySettings é um campo opcional. Se isso for usado, somente Manual e PAC (configuração automática de proxy) serão compatíveis.
    • Type precisa ser definido como WiFi. Outros tipos de redes não são compatíveis.
  • Objetos WiFi:
    • SSID e HexSSID são aceitos, e pelo menos um deles precisa estar presente.
      • Se HexSSID e SSID forem definidos, os valores precisarão ser consistentes.
    • HiddenSSID é compatível.
    • AllowGatewayARPPolling não é compatível.
    • SignalStrength não é compatível.
    • AutoConnect Se ativada, essa rede será considerada como uma possível candidata para conexão durante a seleção de rede.
    • Security é obrigatório e os seguintes valores são aceitos: - None - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
  • Para senhas de WEP-PSK, só são aceitas senhas de 40 bits (10 dígitos) ou 104 bits (26 dígitos).
  • A especificação afirma que as frases secretas WEP-PSK precisam começar com o prefixo 0x. No entanto, para manter a consistência com o framework do Android, esse prefixo não é obrigatório.
  • Para definir o modo de randomização de MAC , use a propriedade MACAddressRandomizationMode definida com os valores Hardware ou Automatic. Essa propriedade não está disponível na especificação Open Network Configuration (ONC), mas é fornecida na AMAPI e pode ser especificada ao configurar redes Wi-Fi. Isso se aplica apenas ao Android 13 ou mais recente em todos os modos de gerenciamento.
    • O Hardware usa o endereço MAC de fábrica ao se conectar à rede.
    • O Automatic permite que a estrutura do Wi-Fi decida automaticamente a estratégia de randomização de MAC. Podem ser endereços MAC persistentes ou não persistentes gerados aleatoriamente e usados ao se conectar à rede.
  • 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 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" e "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. Em vez disso, 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 do Open Network Configuration 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) usado para autenticação Wi-Fi. No Android 12 e versões mais recentes, o par de chaves 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. Antes do Android 12, um nonComplianceDetail com motivo API_LEVEL é informado. Um nonComplianceDetail com motivo INVALID_VALUE e motivo específico ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY será informado se o alias do par de chaves especificado não corresponder a uma chave existente. Confira 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 de 192 bits do 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"
      }
   ]
}