הגדרת רשתות

אפשר להשתמש במדיניות כדי להגדיר רשתות 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 objects:
    • GUID, Name, Type וגם WiFi הם שדות נתמכים, וכולם שדות חובה.
    • השדה ProxySettings הוא אופציונלי. אם משתמשים בשיטה הזו, רק Manual ו-PAC (Proxy Auto-Configuration) נתמכים.
    • הערך של Type חייב להיות WiFi. אין תמיכה בסוגים אחרים של רשתות.
  • WiFi objects:
    • המאפיינים 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, ‏ EAP-PWD, ‏ PEAP
  • Certificate objects:
    • אין תמיכה ב-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"
      }
   ]
}