הגדרת רשתות

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