הגדרת רשתות

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