אפשר להשתמש במדיניות כדי להגדיר רשתות Wi-Fi במכשיר. Android Management API משתמש ב-Open Network Configuration, פורמט סטנדרטי מבוסס JSON שפותח במקור כחלק מפרויקט Chromium.
כדי לכלול הגדרת רשת פתוחה במדיניות, מגדירים את השדה openNetworkConfiguration
במשאב Policy
.
במכשירים בניהול מלא, אפשר למנוע מהמשתמש להגדיר ידנית את הגדרות ה-Wi-Fi במכשיר. לשם כך, צריך להגדיר את wifiConfigDisabled
לערך true
במשאב Policy
.
התכונות הנתמכות
Android Management API תומך רק בקבוצת משנה של מפרט Open Network Configuration.
- אובייקט ברמה העליונה:
- צריך להשמיט את הערך של
Type
או להגדיר אותו בתורUnencryptedConfiguration
. אין צורך להצפין את הגדרות הרשת במדיניות, כי המדיניות כולה מוצפנת בשירות Android Management API. בנוסף, יש שכבת הצפנה שנייה למידע רגיש כמו ביטויי גישה ומפתחות פרטיים.
- צריך להשמיט את הערך של
NetworkConfiguration
objects:GUID
,Name
,Type
וגםWiFi
הם שדות נתמכים, וכולם נדרשים.- השדה
ProxySettings
הוא אופציונלי. אם משתמשים באפשרות הזו, רקManual
ו-PAC
(Proxy Auto-Configuration) נתמכים. - הערך של
Type
חייב להיותWiFi
. אין תמיכה בסוגים אחרים של רשתות.
WiFi
objects:- המאפיינים
SSID
ו-HexSSID
נתמכים, וצריך לציין לפחות אחד מהם.- אם הגדרתם את שני המאפיינים
HexSSID
ו-SSID
, הערכים שלהם צריכים להיות עקביים.
- אם הגדרתם את שני המאפיינים
- יש תמיכה ב-
HiddenSSID
. - אין תמיכה ב-
AllowGatewayARPPolling
. - אין תמיכה ב-
SignalStrength
. AutoConnect
אם האפשרות הזו מופעלת, הרשת הזו תיחשב כמועמדת פוטנציאלית להתחברות במהלך בחירת הרשת.- המאפיין
Security
הוא חובה, ואפשר להשתמש בערכים הבאים: – None – WEP-PSK – WPA-PSK – WPA-EAP – WEP-8021X – WPA3-Enterprise_192
- המאפיינים
- לסיסמאות של
WEP-PSK
, יש תמיכה רק בסיסמאות של 40 ביט (10 ספרות) או 104 ביט (26 ספרות). - במפרט מצוין ש
WEP-PSK
ביטויי סיסמה חייבים להתחיל בקידומת0x
. עם זאת, כדי לשמור על עקביות עם Android Framework, הקידומת הזו לא נדרשת. - כדי להגדיר את מצב ההקצאה האקראית של כתובות MAC, משתמשים במאפיין
MACAddressRandomizationMode
עם הערכיםHardware
אוAutomatic
. המאפיין הזה לא זמין במפרט Open Network Configuration (ONC), אבל הוא זמין ב-AMAPI ואפשר לציין אותו כשמגדירים רשתות Wi-Fi. ההגדרה הזו רלוונטית רק ל-Android מגרסה 13 ואילך בכל מצבי הניהול.-
Hardware
משתמש בכתובת ה-MAC של היצרן כשהוא מתחבר לרשת. -
Automatic
מאפשרת ל-Framework של Wi-Fi להחליט באופן אוטומטי על אסטרטגיית האקראיות של כתובת ה-MAC. אלה יכולות להיות כתובות MAC שנוצרות באופן אקראי וקבועות או לא קבועות, שמשמשות להתחברות לרשת.
-
EAP
אובייקטים:- אין תמיכה ב-
ClientCertPattern
. - אין תמיכה ב-
SaveCredentials
כי פרטי הכניסה תמיד נשמרים. - אין תמיכה ב-
UseSystemCAs
. - יש תמיכה ב-
ServerCARef
. - יש תמיכה ב-
ServerCARefs
. - יש תמיכה ב-
DomainSuffixMatch
. הגדרות אלחוטיות של Enterprise ללא השדה הזה (או עם רשימה ריקה כערך) נחשבות לא מאובטחות ונדחות על ידי הפלטפורמה. הערכים צריכים להיות שמות דומיין תקינים (למשל example.com או subdomain.example.com). - יש תמיכה בערכים הבאים בשביל
ClientCertType
:Ref
,KeyPairAlias
- יש תמיכה בערכים הבאים עבור
Inner
:MSCHAPv2
, PAP
- הערכים הנתמכים של
Outer
הם:EAP-AKA
, EAP-TLS
,EAP-TTLS
, EAP-SIM
, PEAP
Certificate
objects:- אין תמיכה ב-
Remove
. במקום זאת, אפשר להשמיט את האישור בהגדרה. - אין תמיכה ב-
TrustBits
.
- אין תמיכה ב-
דוגמאות
כמה רשתות Wi-Fi
בדוגמה הבאה מוצג קטע מדיניות עם שלוש רשתות Wi-Fi שהוגדרו עם תוכניות אבטחה שונות. קובץ ה-JSON של Open Network Configuration מוטמע בשדה 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
כדי לציין את הכינוי של זוג מפתחות ב-KeyChain שהותקן (ראו DevicePolicyManager.installKeyPair
) או נוצר (ראו DevicePolicyManager.generateKeyPair
) ומשמש לאימות Wi-Fi. ב-Android 12 ובגרסאות חדשות יותר, זוג המפתחות של KeyChain עם הכינוי שצוין באמצעות ClientCertKeyPairAlias
מקבל הרשאה לאימות לרשתות Wi-Fi ומשמש לאימות לרשת ה-Wi-Fi המתאימה. לפני Android 12,
מדווחים על
nonComplianceDetail
עם
API_LEVEL
סיבה. A
nonComplianceDetail
with
INVALID_VALUE
reason and
ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY
specific reason is reported if specified key pair alias does not correspond to
an 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 שהוגדרה עם מצב WPA3 192-bit.
"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" } ] }