Skonfiguruj sieci

Zasady mogą służyć do konfigurowania sieci Wi-Fi na urządzeniu. Interfejs Android Management API wykorzystuje Open Network Configuration – standardowy format oparty na formacie JSON, który pierwotnie powstał w ramach projektu Chromium. Więcej informacji o otwartej konfiguracji sieci znajdziesz w specyfikacji.

Aby uwzględnić w zasadzie otwartą konfigurację sieci, ustaw pole openNetworkConfiguration w zasobie Policy.

W przypadku w pełni zarządzanych urządzeń możesz opcjonalnie uniemożliwić użytkownikowi ręczne konfigurowanie ustawień Wi-Fi na ich urządzeniach, ustawiając wifiConfigDisabled na true w zasobie Policy.

Obsługiwane funkcje

Interfejs Android Management API obsługuje tylko podzbiór specyfikacji Open Network Configuration.

  • Obiekt najwyższego poziomu:
    • Parametr Type musi zostać pominięty lub ustawiony na wartość UnencryptedConfiguration. Nie trzeba szyfrować konfiguracji sieci w ramach zasady, ponieważ cała zasada jest szyfrowana w usłudze Android Management API. Dostępna jest też druga warstwa szyfrowania informacji poufnych, takich jak hasła i klucze prywatne.
  • NetworkConfiguration obiekt:
    • GUID, Name, Type i WiFi to obsługiwane pola i wszystkie są wymagane.
    • ProxySettings to pole opcjonalne. Jeśli ta opcja jest używana, obsługiwane są tylko ustawienia Manual i PAC (automatyczna konfiguracja serwera proxy).
    • Type musi mieć wartość WiFi. Inne typy sieci nie są obsługiwane.
  • WiFi obiekt:
    • AllowGatewayARPPolling nie jest obsługiwany.
    • SignalStrength nie jest obsługiwany.
    • Wymagana jest właściwość Security, a obsługiwane są te wartości: - None - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
    • W przypadku haseł WEP-PSK obsługiwane są tylko hasła 40-bitowe (10-cyfrowe) lub 104-bitowe (26-cyfrowe).
    • Specyfikacja określa, że hasła WEP-PSK muszą zaczynać się od prefiksu 0x. Jednak ze względu na spójność z Android Framework ten prefiks nie jest wymagany.
    • Aby ustawić tryb randomizacji MAC, użyj właściwości MACAddressRandomizationMode ustawionej z wartościami Hardware lub Automatic. Ta właściwość jest obecnie niedostępna w specyfikacji Open Network Configuration (ONC), ale jest dostępna w AMAPI i można ją określić podczas konfigurowania sieci Wi-Fi. Dotyczy to tylko Androida 13 i nowszego we wszystkich trybach zarządzania.
      • Hardware podczas łączenia się z siecią używa fabrycznego adresu MAC.
      • Automatic pozwala platformie Wi-Fi automatycznie zdecydować o strategii losowości MAC. Mogą to być trwałe lub nietrwałe generowane losowo adresy MAC używane podczas łączenia się z siecią.
  • EAP obiekt:
    • ClientCertPattern nie jest obsługiwany.
    • SaveCredentials nie jest obsługiwany.
    • UseSystemCAs nie jest obsługiwany.
    • DomainSuffixMatch jest obsługiwane.
      Konfiguracje bezprzewodowe w firmie, które nie mają tego pola (lub z pustą listą jako wartość), są uznawane za niezabezpieczone i odrzucane przez platformę. Wartościami powinny być prawidłowe nazwy domen (np. „example.com”, „subdomena.example.com”).
    • ClientCertType obsługuje tylko wartość Ref
    • W polu Inner obsługiwane są te wartości: MSCHAPv2 oraz PAP
    • W polu Outer obsługiwane są te wartości: EAP-AKA, EAP-TLS, EAP-TTLS, EAP-SIM oraz PEAP
  • Certificate obiekt:
    • Remove nie jest obsługiwany. Pomiń certyfikat w konfiguracji.
    • TrustBits nie jest obsługiwany.

Przykłady

Wiele sieci Wi-Fi

Ten przykładowy fragment zasady pokazuje 3 sieci Wi-Fi ze skonfigurowanymi różnymi schematami zabezpieczeń. Plik JSON z konfiguracją sieci Open Network jest umieszczony w polu openNetworkConfiguration w 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"
   }
 }]
}

Uwierzytelnianie EAP

Ten przykładowy fragment zasady przedstawia sieć bezprzewodową z uwierzytelnianiem EAP-TLS. Oprócz obiektu NetworkConfigurations w przykładzie znajdują się 2 obiekty Certificates: certyfikat klienta i serwera.

"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"
               ],
               "ServerCARef": "abc123",
               "ClientCertType": "Ref",
               "ClientCertRef": "xyz456"
            },
            "Security": "WPA-EAP"
         }
      }
   ],
   "Certificates": [
      {
         "GUID": "abc123",
         "Type": "Server",
         "X509": "TWFuIGlzIGRpc3Rpbmd1a"
      },
      {
         "GUID": "xyz456",
         "Type": "Client",
         "PKCS12": "6PQIEQYJKoZbdDu8gwggRlqCCAPEbAAcGClgvcNAQc"
      }
   ]
}

Pole ClientCertType może też mieć wartość KeyPairAlias, a pole ClientCertKeyPairAlias może służyć do określania aliasu pary kluczy zainstalowanej (patrz: DevicePolicyManager.installKeyPair) lub wygenerowanej (patrz DevicePolicyManager.generateKeyPair) pary kluczy używanej do uwierzytelniania w sieci Wi-Fi. W Androidzie 12 i nowszych para kluczy łańcucha kluczy z aliasem określonym w zasadzie ClientCertKeyPairAlias jest przyznawana na potrzeby uwierzytelniania w sieciach Wi-Fi i używana do uwierzytelniania w odpowiednich sieciach Wi-Fi. W przypadku Androida 12 zgłaszany jest błąd nonComplianceDetail z API_LEVEL przyczyną. Jeśli podany alias pary kluczy nie odpowiada istniejącemu kluczowi, raport nonComplianceDetail zawiera przyczynę INVALID_VALUE i przyczynę konkretnego ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY. Oto przykładowe zasady:

"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"
               ],
               "ServerCARef": "abc123",
               "ClientCertType": "KeyPairAlias",
               "ClientCertKeyPairAlias": "key-alias"
            },
            "Security": "WPA-EAP"
         }
      }
   ],
   "Certificates": [
      {
         "GUID": "abc123",
         "Type": "Server",
         "X509": "TWFuIGlzIGRpc3Rpbmd1a"
      }
   ]
}

Pole Security może też zawierać wartość WPA3-Enterprise_192 (sieć WPA-EAP skonfigurowaną w trybie 192-bitowym WPA3).

"openNetworkConfiguration": {
   "Type": "UnencryptedConfiguration",
   "NetworkConfigurations": [
      {
         "Type": "WiFi",
         "Name": "Example A",
         "GUID": "A",
         "WiFi": {
            "SSID": "Example A",
            "EAP": {
               "Outer": "EAP-TLS",
               "Identity": "example",
               "ServerCARef": "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"
      }
   ]
}