אפשר להשתמש במדיניות כדי להגדיר רשתות Wi-Fi במכשיר. Android Management API משתמש ב-Open Network Configuration, פורמט סטנדרטי שמבוסס על JSON שפותח במקור כחלק מפרויקט Chromium. פרטים מלאים על Open Network Configuration מופיעים במפרט.
כדי לכלול הגדרה של רשת פתוחה במדיניות, מגדירים את השדה 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
. המאפיין הזה לא זמין כרגע במפרט של תצורת הרשת הפתוחה (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" } ] }