הגדרת רשתות

אפשר להשתמש במדיניות כדי להגדיר רשתות 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"
      }
   ]
}