אפשר להשתמש במדיניות כדי להגדיר רשתות Wi-Fi במכשיר. ב-Android Management API נעשה שימוש בתצורת רשת פתוחה, פורמט סטנדרטי מבוסס JSON שפותח במקור כחלק מפרויקט Chromium. קראו את המפרט המלא לפרטים מלאים על הגדרת הרשת הפתוחה.
כדי לכלול הגדרת רשת פתוחה במדיניות, מגדירים את השדה openNetworkConfiguration
במשאב של Policy
.
במכשירים מנוהלים באופן מלא, אפשר למנוע מהמשתמש לקבוע באופן ידני הגדרות Wi-Fi במכשיר שלו על ידי הגדרת הערך wifiConfigDisabled
לערך true
במשאב Policy
.
התכונות הנתמכות
Android Management API תומך רק בקבוצת משנה של מפרט תצורת הרשת הפתוחה.
- אובייקט ברמה העליונה:
- צריך להשמיט את השדה
Type
או להגדיר אותו לערךUnencryptedConfiguration
. אין צורך להצפין את הגדרות הרשת במסגרת המדיניות, כי כל המדיניות מוצפנת במסגרת השירות Android Management API. בנוסף, קיימת שכבה שנייה להצפנה של מידע רגיש, כמו ביטויי סיסמה ומפתחות פרטיים.
- צריך להשמיט את השדה
NetworkConfiguration
אובייקטים:- השדות
GUID
,Name
,Type
ו-WiFi
הם שדות נתמכים, וכולם נדרשים. ProxySettings
הוא שדה אופציונלי. אם משתמשים באפשרות הזו, יש תמיכה רק ב-Manual
וב-PAC
(הגדרה אוטומטית של שרת Proxy).- הערך של
Type
חייב להיותWiFi
. אין תמיכה בסוגים אחרים של רשתות.
- השדות
WiFi
אובייקטים:- אין תמיכה ב-
AllowGatewayARPPolling
. - אין תמיכה ב-
SignalStrength
. - השדה
Security
נדרש והערכים הבאים נתמכים: - ללא - 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
. המאפיין הזה לא זמין כרגע במפרט תצורת רשת פתוחה (ONC), אבל הוא מסופק ב-AMAPI ואפשר לציין אותו כשמגדירים רשתות Wi-Fi. הדרישה הזו רלוונטית רק ל-Android מגרסה 13 ואילך בכל מצבי הניהול.Hardware
עושה שימוש בכתובת ה-MAC של היצרן כשמתחברים לרשת.Automatic
מאפשר למסגרת ה-Wi-Fi להחליט באופן אוטומטי על אסטרטגיית רנדומיזציה של כתובות MAC. זאת יכולה להיות כתובות MAC קבועות או לא קבועות, שהמערכת משתמשת בהן באופן אקראי כדי להתחבר לרשת.
- אין תמיכה ב-
EAP
אובייקטים:- אין תמיכה ב-
ClientCertPattern
. - אין תמיכה ב-
SaveCredentials
. - אין תמיכה ב-
UseSystemCAs
. DomainSuffixMatch
נתמך.
הגדרות אלחוטיות בארגונים בלי השדה הזה (או כשהערך שלהן ברשימה ריקה) נחשבות לא מאובטחות ונדחו על ידי הפלטפורמה. הערכים צריכים להיות שמות דומיינים חוקיים (למשל "example.com" , "subdomain.example.com").- ב-
ClientCertType
יש תמיכה רק בערךRef
- הערכים הבאים נתמכים עבור
Inner
:MSCHAPv2
,PAP
- הערכים הבאים נתמכים עבור
Outer
:EAP-AKA
,EAP-TLS
,EAP-TTLS
,EAP-SIM
,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" ], "ServerCARef": "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
) - המשמש לאימות 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" ], "ServerCARef": "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", "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" } ] }