הגדרת רשתות

ניתן להשתמש במדיניות כדי להגדיר רשתות Wi-Fi במכשיר. מכשיר Android ב-Management API נעשה שימוש ב-Open Network Configuration (הגדרת רשת פתוחה), בפורמט סטנדרטי מבוסס 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. הנכס הזה נמצא כרגע לא זמינה במפרט Open Network Configuration (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, KeyPairAlias
    • הערכים הבאים נתמכים במאפיין Inner: MSCHAPv2, PAP
    • הערכים הבאים נתמכים במאפיין Outer: EAP-AKA, EAP-TLS, EAP-TTLS, EAP-SIM, PEAP
  • Certificate אובייקטים:
    • אין תמיכה ב-Remove. השמטת האישור בהגדרות האישיות במקום זאת.
    • אין תמיכה ב-TrustBits.

דוגמאות

מספר רשתות Wi-Fi

בקטע של המדיניות לדוגמה מוצגות שלוש רשתות Wi-Fi שהוגדרו עם תוכניות אבטחה שונות. קובץ ה-JSON של תצורת רשת פתוחה נמצא בתוך השדה openNetworkConfiguration של Policy JSON.

"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 סיביות.

"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"
      }
   ]
}