Za pomocą zasad możesz skonfigurować sieci Wi-Fi na urządzeniu. Interfejs Android Management API korzysta z formatu Open Network Configuration, standardowego formatu opartego na JSON, który został pierwotnie opracowany w ramach projektu Chromium.
Aby uwzględnić konfigurację otwartej sieci w zasadach, ustaw pole openNetworkConfiguration
w zasobie Policy
.
W przypadku urządzeń w pełni zarządzanych możesz opcjonalnie uniemożliwić użytkownikowi ręczne skonfigurowanie ustawień Wi-Fi na urządzeniu, ustawiając wartość 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 musisz szyfrować konfiguracji sieci w zasadach, ponieważ całe zasady są szyfrowane w usłudze Android Management API. Dodatkowo istnieje druga warstwa szyfrowania informacji poufnych, takich jak hasła i klucze prywatne.
- Parametr
NetworkConfiguration
obiekty:GUID
,Name
,Type
iWiFi
to obsługiwane pola, które są wymagane.ProxySettings
to pole opcjonalne. Jeśli jest używana, obsługiwane są tylkoManual
iPAC
(automatyczna konfiguracja serwera proxy).- Pole
Type
musi mieć wartośćWiFi
. Inne typy sieci nie są obsługiwane.
WiFi
obiekty:- Atrybuty
SSID
iHexSSID
są obsługiwane i co najmniej jeden z nich musi być obecny.- Jeśli ustawisz zarówno
HexSSID
, jak iSSID
, wartości muszą być spójne.
- Jeśli ustawisz zarówno
HiddenSSID
jest obsługiwane.AllowGatewayARPPolling
nie jest obsługiwany.SignalStrength
nie jest obsługiwany.AutoConnect
Jeśli ta opcja jest włączona, sieć będzie brana pod uwagę jako potencjalny kandydat do połączenia podczas wyboru sieci.Security
jest wymagany. Obsługiwane są te wartości: - None - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
- Atrybuty
- W przypadku
WEP-PSK
haseł obsługiwane są tylko hasła 40-bitowe (10-cyfrowe) lub 104-bitowe (26-cyfrowe). - Specyfikacja mówi, że
WEP-PSK
hasła wielowyrazowe muszą zaczynać się od przedrostka0x
. Jednak ze względu na spójność z platformą Android ten prefiks nie jest wymagany. - Aby ustawić tryb randomizacji adresu MAC, użyj właściwości
MACAddressRandomizationMode
z wartościamiHardware
lubAutomatic
. Ta właściwość jest 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 lub nowszego we wszystkich trybach zarządzania.Hardware
używa fabrycznego adresu MAC podczas łączenia się z siecią.Automatic
pozwala platformie Wi-Fi automatycznie decydować o strategii losowego generowania adresu MAC. Mogą to być stałe lub niestabilne losowo generowane adresy MAC, które są używane podczas łączenia się z siecią.
EAP
obiektów:ClientCertPattern
nie jest obsługiwany.SaveCredentials
nie jest obsługiwany, ponieważ dane logowania są zawsze zapisywane.UseSystemCAs
nie jest obsługiwany.ServerCARef
jest obsługiwane.ServerCARefs
jest obsługiwane.DomainSuffixMatch
jest obsługiwane. Konfiguracje bezprzewodowe dla firm bez tego pola (lub z pustą listą jako wartością) są uważane za niebezpieczne i odrzucane przez platformę. Wartości powinny być prawidłowymi nazwami domen (np. „example.com”, „subdomain.example.com”).- W przypadku parametru
ClientCertType
obsługiwane są te wartości:Ref
,KeyPairAlias
- W przypadku parametru
Inner
obsługiwane są te wartości:MSCHAPv2
,PAP
- W przypadku parametru
Outer
obsługiwane są te wartości:EAP-AKA
,EAP-TLS
,EAP-TTLS
,EAP-SIM
,PEAP
Certificate
obiekty:Remove
nie jest obsługiwany. Zamiast tego pomiń certyfikat w konfiguracji.TrustBits
nie jest obsługiwany.
Przykłady
Wiele sieci Wi-Fi
Ten fragment zasad pokazuje 3 sieci Wi-Fi skonfigurowane z różnymi schematami zabezpieczeń. Plik JSON konfiguracji Open Network Configuration jest zagnieżdżony w polu openNetworkConfiguration
pliku 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 fragment przykładowej zasady pokazuje sieć bezprzewodową skonfigurowaną z uwierzytelnianiem EAP-TLS. Oprócz obiektu NetworkConfigurations
przykład zawiera 2 obiekty Certificates
dla certyfikatów 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" ], "ServerCARefs": ["abc123"], "ClientCertType": "Ref", "ClientCertRef": "xyz456" }, "Security": "WPA-EAP" } } ], "Certificates": [ { "GUID": "abc123", "Type": "Server", "X509": "TWFuIGlzIGRpc3Rpbmd1a" }, { "GUID": "xyz456", "Type": "Client", "PKCS12": "6PQIEQYJKoZbdDu8gwggRlqCCAPEbAAcGClgvcNAQc" } ] }
Pole ClientCertType
można też ustawić na KeyPairAlias
, a pole ClientCertKeyPairAlias
może służyć do określania aliasu zainstalowanej (patrz DevicePolicyManager.installKeyPair
) lub wygenerowanej (patrz DevicePolicyManager.generateKeyPair
) pary kluczy KeyChain, która jest używana do uwierzytelniania Wi-Fi. W przypadku Androida 12 i nowszych wersji para kluczy KeyChain z aliasem określonym za pomocą ClientCertKeyPairAlias
jest przyznawana do uwierzytelniania w sieciach Wi-Fi i używana do uwierzytelniania w odpowiedniej sieci Wi-Fi. W przypadku Androida 12 i starszych wersji zgłaszana jest nonComplianceDetail
z powodu API_LEVEL
. A
nonComplianceDetail
with
INVALID_VALUE
reason and
ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY
specific reason jest zgłaszany, jeśli określony alias pary kluczy nie odpowiada istniejącemu kluczowi. 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" ], "ServerCARefs": ["abc123"], "ClientCertType": "KeyPairAlias", "ClientCertKeyPairAlias": "key-alias" }, "Security": "WPA-EAP" } } ], "Certificates": [ { "GUID": "abc123", "Type": "Server", "X509": "TWFuIGlzIGRpc3Rpbmd1a" } ] }
Pole Security
może też mieć wartość WPA3-Enterprise_192
, która oznacza sieć WPA-EAP
skonfigurowaną w 192-bitowym trybie 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" } ] }