אפשר להשתמש במדיניות כדי להגדיר רשתות 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
:- השדות
GUID
,Name
,Type
ו-WiFi
נתמכים, וכל אחד מהם נדרש. - השדה
ProxySettings
הוא אופציונלי. אם משתמשים באפשרות הזו, רקManual
ו-PAC
(הגדרה אוטומטית של שרת proxy) נתמכים. - הערך של
Type
חייב להיותWiFi
. אין תמיכה בסוגים אחרים של רשתות.
- השדות
- אובייקטים מסוג
WiFi
:- השדות
SSID
ו-HexSSID
נתמכים, וצריך להופיע לפחות אחד מהם.- אם גם
HexSSID
וגםSSID
מוגדרים, הערכים חייבים להיות עקביים.
- אם גם
- יש תמיכה ב-
HiddenSSID
. - אין תמיכה ב-
AllowGatewayARPPolling
. - אין תמיכה ב-
SignalStrength
. - השדה
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
מאפשרת למסגרת ה-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
,PEAP
- אובייקטים מסוג
Certificate
:- אין תמיכה ב-
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
. אם הכינוי של זוג המפתחות שצוין לא תואם למפתח קיים, מתבצע דיווח על אירוע 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 שמוגדרת במצב WPA3 של 192 ביט.
"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" } ] }