Настройка сетей

Для настройки сетей Wi-Fi на устройстве можно использовать политики. API управления Android использует Open Network Configuration, стандартный формат на основе JSON, первоначально разработанный в рамках проекта Chromium.

Чтобы включить конфигурацию открытой сети в политику, установите поле openNetworkConfiguration в ресурсе Policy .

Для устройств, находящихся под полным управлением, можно дополнительно запретить пользователю вручную настраивать параметры Wi-Fi на своем устройстве, установив параметр wifiConfigDisabled в true в ресурсе Policy .

Поддерживаемые функции

API управления Android поддерживает лишь часть спецификации Open Network Configuration.

  • Объект верхнего уровня:
    • Type следует опустить или установить значение UnencryptedConfiguration . Нет необходимости шифровать сетевую конфигурацию в рамках политики, поскольку вся политика шифруется внутри службы Android Management API. Кроме того, существует второй уровень шифрования для конфиденциальной информации, такой как парольные фразы и закрытые ключи.
  • Объекты NetworkConfiguration :
    • Поддерживаются поля GUID , Name , Type и WiFi , и все они обязательны для заполнения.
    • Поле ProxySettings является необязательным. Если оно используется, поддерживаются только Manual и PAC (автоматическая настройка прокси).
    • Для подключения необходимо выбрать Type WiFi . Другие типы сетей не поддерживаются.
  • Объекты WiFi :
    • Поддерживаются SSID и HexSSID , при этом должен присутствовать хотя бы один из них.
      • Если заданы и HexSSID , и SSID , значения должны совпадать.
    • HiddenSSID поддерживается.
    • AllowGatewayARPPolling не поддерживается.
    • SignalStrength не поддерживается.
    • AutoConnect : В этом поле определяется, будет ли сеть автоматически включена. Этот параметр не зависит от опции автоматического подключения для каждой сети, доступной пользователям в настройках Wi-Fi устройства.
      • Если установлено значение true , сеть включена, то есть устройство может автоматически подключаться к ней без явного выбора пользователем в настройках Wi-Fi, если только пользователь не отключит автоматическое подключение для этой сети.
      • Если установлено значение false , сеть добавляется в список сохраненных сетей, но не активируется. Устройство не подключается к ней автоматически. Для подключения устройства к сети пользователю необходимо один раз вручную выбрать сеть в настройках Wi-Fi. После первого ручного подключения сеть считается активной, и устройство может подключаться к ней автоматически, если пользователь не отключит автоматическое подключение для этой сети.
    • Требуется Security , поддерживаются следующие значения: - Нет - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
  • Для паролей WEP-PSK поддерживаются только 40-битные (10-значные) или 104-битные (26-значные) пароли.
  • В спецификации указано, что парольные фразы WEP-PSK должны начинаться с префикса 0x . Однако для обеспечения согласованности с фреймворком Android этот префикс не является обязательным.
  • Для установки режима рандомизации MAC-адресов используйте свойство MACAddressRandomizationMode со значениями Hardware или Automatic . Это свойство недоступно в спецификации Open Network Configuration (ONC) , но предоставляется в AMAPI и может быть указано при настройке сетей Wi-Fi. Это относится только к Android 13+ во всех режимах управления.
    • При подключении к сети Hardware использует заводской MAC-адрес.
    • В режиме Automatic платформа Wi-Fi автоматически определяет стратегию рандомизации MAC-адресов. Это могут быть как постоянные, так и непостоянные случайно сгенерированные MAC-адреса, используемые при подключении к сети.
  • Объекты EAP :
  • ClientCertPattern не поддерживается.
  • SaveCredentials не поддерживается, поскольку учетные данные всегда сохраняются.
  • UseSystemCAs не поддерживается.
  • Поддержка ServerCARef имеется.
  • ServerCARefs поддерживается.
  • Поддерживается DomainSuffixMatch . Конфигурации корпоративных беспроводных сетей без этого поля (или с пустым списком значений) считаются небезопасными и отклоняются платформой . Значения должны быть допустимыми доменными именами (например, "example.com", "subdomain.example.com").
  • Для ClientCertType поддерживаются следующие значения: Ref , KeyPairAlias
  • Для Inner поддерживаются следующие значения: MSCHAPv2 , PAP
  • Для Outer поддерживаются следующие значения: EAP-AKA , EAP-TLS , EAP-TTLS , EAP-SIM , EAP-PWD , 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"
               ],
               "ServerCARefs": ["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"
               ],
               "ServerCARefs": ["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",
               "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"
      }
   ]
}