אפשר להשתמש במדיניות כדי להגדיר רשתות 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. בנוסף, יש שכבת הצפנה שנייה למידע רגיש כמו ביטויי גישה ומפתחות פרטיים.
- צריך להשמיט את הערך של
NetworkConfigurationobjects:GUID,Name,TypeוגםWiFiהם שדות נתמכים, וכולם נדרשים.- השדה
ProxySettingsהוא אופציונלי. אם משתמשים בשיטה הזו, רקManualו-PAC(Proxy Auto-Configuration) נתמכים. - הערך של
Typeחייב להיותWiFi. אין תמיכה בסוגים אחרים של רשתות.
WiFiobjects:- המאפיינים
SSIDו-HexSSIDנתמכים, וצריך לציין לפחות אחד מהם.- אם הגדרתם את שני המאפיינים
HexSSIDו-SSID, הערכים שלהם צריכים להיות עקביים.
- אם הגדרתם את שני המאפיינים
- יש תמיכה ב-
HiddenSSID. - אין תמיכה ב-
AllowGatewayARPPolling. - אין תמיכה ב-
SignalStrength. -
AutoConnect: השדה הזה קובע אם הרשת מופעלת באופן אוטומטי. ההגדרה הזו לא תלויה באפשרות החיבור האוטומטי לכל רשת שזמינה למשתמשים בהגדרות ה-Wi-Fi של המכשיר.- אם ההגדרה היא
true, הרשת מופעלת, כלומר המכשיר יכול להתחבר אליה באופן אוטומטי בלי שהמשתמש יבחר אותה באופן מפורש בהגדרות ה-Wi-Fi, אלא אם המשתמש משבית את החיבור האוטומטי לרשת הזו. - אם הערך הוא
false, הרשת נוספת לרשימת הרשתות השמורות אבל לא מופעלת. המכשיר לא מתחבר אליה באופן אוטומטי. כדי שהמכשיר יתחבר לרשת, המשתמש צריך לבחור את הרשת באופן ידני פעם אחת בהגדרות ה-Wi-Fi. אחרי החיבור הידני הראשון, הרשת נחשבת כמופעלת והמכשיר יכול להתחבר אליה באופן אוטומטי, אלא אם המשתמש משבית את החיבור האוטומטי לרשת הזו.
- אם ההגדרה היא
- המאפיין
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. הגדרות אלחוטיות של Enterprise ללא השדה הזה (או עם רשימה ריקה כערך) נחשבות לא מאובטחות והפלטפורמה דוחה אותן. הערכים צריכים להיות שמות דומיין תקינים (למשל example.com או subdomain.example.com). - הערכים הנתמכים של
ClientCertTypeהם:Ref,KeyPairAlias - הערכים הנתמכים של
Innerהם:MSCHAPv2, PAP - הערכים הנתמכים של
Outerהם:EAP-AKA, EAP-TLS,EAP-TTLS, EAP-SIM, PEAP Certificateobjects:- אין תמיכה ב-
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"
}
]
}