پیکربندی شبکه ها

می توانید از خط مشی برای پیکربندی شبکه های Wi-Fi در دستگاه استفاده کنید. API مدیریت Android از پیکربندی شبکه باز، یک قالب استاندارد مبتنی بر JSON استفاده می‌کند که در ابتدا به عنوان بخشی از پروژه Chromium توسعه داده شد. برای جزئیات کامل در مورد پیکربندی شبکه باز به مشخصات مراجعه کنید.

برای گنجاندن یک پیکربندی شبکه باز در یک خط مشی، فیلد openNetworkConfiguration را در یک منبع Policy تنظیم کنید.

برای دستگاه‌های کاملاً مدیریت‌شده، می‌توانید با تنظیم wifiConfigDisabled روی true در منبع Policy ، به‌صورت اختیاری از پیکربندی دستی تنظیمات Wi-Fi روی دستگاه خود توسط کاربر جلوگیری کنید.

ویژگی های پشتیبانی شده

API مدیریت Android تنها از زیرمجموعه‌ای از مشخصات پیکربندی شبکه باز پشتیبانی می‌کند.

  • شی سطح بالا:
    • Type باید حذف شود یا روی UnencryptedConfiguration تنظیم شود. نیازی به رمزگذاری پیکربندی شبکه در یک خط مشی نیست زیرا کل خط مشی در سرویس Android Management API رمزگذاری شده است. علاوه بر این، لایه دوم رمزگذاری برای اطلاعات حساس مانند عبارات عبور و کلیدهای خصوصی وجود دارد.
  • اشیاء NetworkConfiguration :
    • فیلدهای GUID ، Name ، Type و WiFi پشتیبانی می‌شوند و همگی ضروری هستند.
    • ProxySettings یک فیلد اختیاری است. اگر از این مورد استفاده شود، فقط Manual و PAC (پیکربندی خودکار پروکسی) پشتیبانی می شود.
    • Type باید روی WiFi تنظیم شود. انواع دیگر شبکه ها پشتیبانی نمی شوند.
  • اشیاء WiFi :
    • SSID و HexSSID پشتیبانی می شوند و حداقل یکی از آنها باید وجود داشته باشد.
      • اگر هر دو HexSSID و SSID تنظیم شده باشند، مقادیر باید سازگار باشند.
    • HiddenSSID پشتیبانی می شود.
    • AllowGatewayARPPolling پشتیبانی نمی شود.
    • SignalStrength پشتیبانی نمی شود.
    • Security لازم است و مقادیر زیر پشتیبانی می شوند: - هیچ - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
    • برای عبارت‌های عبور WEP-PSK ، فقط عبارت‌های عبور 40 بیتی (10 رقمی) یا 104 بیتی (26 رقمی) پشتیبانی می‌شوند.
    • مشخصات بیان می کند که عبارات عبور WEP-PSK باید با پیشوند 0x شروع شوند. با این حال، برای سازگاری با چارچوب Android، این پیشوند مورد نیاز نیست.
    • برای تنظیم حالت تصادفی سازی MAC ، از ویژگی MACAddressRandomizationMode با مقادیر Hardware یا Automatic استفاده کنید. این ویژگی در حال حاضر در مشخصات Open Network Configuration (ONC) در دسترس نیست اما در AMAPI ارائه شده است و می توان آن را در هنگام پیکربندی شبکه های WiFi مشخص کرد. این فقط برای 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 را نشان می دهد که با طرح های امنیتی مختلف پیکربندی شده اند. Open Network Configuration 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"
               ],
               "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 ​​می‌توان برای تعیین نام مستعار یک نصب شده (به DevicePolicyManager.installKeyPair مراجعه کنید) یا ایجاد کرد (به DevicePolicyManager.generateKeyPair استفاده می‌شود که برای KeyPair استفاده می‌شود استفاده کرد. در اندروید 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 است که با حالت 192 بیتی WPA3 پیکربندی شده است.

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