Định cấu hình mạng

Bạn có thể dùng chính sách để định cấu hình mạng Wi-Fi trên thiết bị. Android Management API sử dụng Cấu hình mạng mở, một định dạng tiêu chuẩn dựa trên JSON được phát triển ban đầu trong dự án Chromium.

Để đưa một Cấu hình mạng mở vào chính sách, hãy đặt trường openNetworkConfiguration trên tài nguyên Policy.

Đối với các thiết bị do công ty quản lý hoàn toàn, bạn có thể ngăn người dùng định cấu hình chế độ cài đặt Wi-Fi theo cách thủ công trên thiết bị của họ bằng cách đặt wifiConfigDisabled thành true trong tài nguyên Policy.

Tính năng được hỗ trợ

Android Management API chỉ hỗ trợ một phần của quy cách Open Network Configuration.

  • Đối tượng cấp cao nhất:
    • Bạn phải bỏ qua hoặc đặt Type thành UnencryptedConfiguration. Bạn không cần mã hoá cấu hình mạng trong một chính sách vì toàn bộ chính sách đều được mã hoá trong dịch vụ Android Management API. Ngoài ra, còn có một lớp mã hoá thứ hai cho thông tin nhạy cảm như cụm mật khẩu và khoá riêng tư.
  • Đối tượng NetworkConfiguration:
    • GUID, Name, TypeWiFi là các trường được hỗ trợ và đều là trường bắt buộc.
    • ProxySettings là trường không bắt buộc. Nếu bạn sử dụng chế độ này, chỉ ManualPAC (Tự động định cấu hình proxy) được hỗ trợ.
    • Type phải được đặt thành WiFi. Các loại mạng khác không được hỗ trợ.
  • Đối tượng WiFi:
    • SSIDHexSSID được hỗ trợ và bạn phải cung cấp ít nhất một trong hai thuộc tính này.
      • Nếu bạn đặt cả HexSSIDSSID, thì các giá trị phải nhất quán.
    • HiddenSSID được hỗ trợ.
    • AllowGatewayARPPolling không được hỗ trợ.
    • SignalStrength không được hỗ trợ.
    • AutoConnect Nếu được bật, mạng này sẽ được coi là một ứng cử viên tiềm năng để kết nối trong quá trình chọn mạng.
    • Security là trường bắt buộc và hỗ trợ các giá trị sau: – None – WEP-PSK – WPA-PSK – WPA-EAP – WEP-8021X – WPA3-Enterprise_192
  • Đối với cụm mật khẩu WEP-PSK, chỉ hỗ trợ cụm mật khẩu 40 bit (10 chữ số) hoặc 104 bit (26 chữ số).
  • Quy cách này quy định rằng cụm mật khẩu WEP-PSK phải bắt đầu bằng tiền tố 0x. Tuy nhiên, để nhất quán với Khung Android, bạn không bắt buộc phải dùng tiền tố này.
  • Để đặt chế độ ngẫu nhiên hoá địa chỉ MAC, hãy sử dụng thuộc tính MACAddressRandomizationMode được đặt bằng các giá trị Hardware hoặc Automatic. Thuộc tính này không có trong quy cách Cấu hình mạng mở (ONC) nhưng được cung cấp trong AMAPI và có thể được chỉ định trong khi định cấu hình mạng Wi-Fi. Điều này chỉ áp dụng cho Android 13 trở lên ở tất cả các chế độ quản lý.
    • Hardware sử dụng địa chỉ MAC ban đầu khi kết nối với mạng.
    • Automatic cho phép khung Wi-Fi tự động quyết định chiến lược ngẫu nhiên hoá địa chỉ MAC. Đây có thể là địa chỉ MAC được tạo ngẫu nhiên vĩnh viễn hoặc không vĩnh viễn và được dùng khi kết nối với mạng.
  • EAP đối tượng:
  • ClientCertPattern không được hỗ trợ.
  • SaveCredentials không được hỗ trợ vì thông tin đăng nhập luôn được lưu.
  • UseSystemCAs không được hỗ trợ.
  • ServerCARef được hỗ trợ.
  • ServerCARefs được hỗ trợ.
  • DomainSuffixMatch được hỗ trợ. Cấu hình không dây của doanh nghiệp không có trường này (hoặc có danh sách trống làm giá trị) được coi là không an toàn và bị nền tảng từ chối. Giá trị phải là tên miền hợp lệ (ví dụ: "example.com", "subdomain.example.com").
  • Các giá trị sau đây được hỗ trợ cho ClientCertType: Ref, KeyPairAlias
  • Inner hỗ trợ các giá trị sau: MSCHAPv2, PAP
  • Các giá trị sau đây được hỗ trợ cho Outer: EAP-AKA, EAP-TLS, EAP-TTLS, EAP-SIM, PEAP
  • Đối tượng Certificate:
    • Remove không được hỗ trợ. Thay vào đó, hãy bỏ qua chứng chỉ trong cấu hình.
    • TrustBits không được hỗ trợ.

Ví dụ

Nhiều mạng Wi-Fi

Đoạn chính sách mẫu này cho thấy 3 mạng Wi-Fi được định cấu hình bằng các lược đồ bảo mật khác nhau. JSON Cấu hình mạng mở được lồng trong trường openNetworkConfiguration của 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"
      }
    }
  ]
}

Xác thực EAP

Đoạn chính sách ví dụ này cho thấy một mạng không dây được định cấu hình bằng phương thức xác thực EAP-TLS. Ngoài đối tượng NetworkConfigurations, ví dụ này còn có 2 đối tượng Certificates cho chứng chỉ máy khách và máy chủ.

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

Bạn cũng có thể đặt trường ClientCertType thành KeyPairAlias và trường ClientCertKeyPairAlias có thể dùng để chỉ định biệt hiệu của một cặp khoá KeyChain đã cài đặt (xem DevicePolicyManager.installKeyPair) hoặc được tạo (xem DevicePolicyManager.generateKeyPair) được dùng để xác thực Wi-Fi. Đối với Android 12 trở lên, cặp khoá KeyChain có email đại diện được chỉ định bằng ClientCertKeyPairAlias sẽ được cấp quyền xác thực cho các mạng Wi-Fi và được dùng để xác thực cho mạng Wi-Fi tương ứng. Trước Android 12, nonComplianceDetail có lý do API_LEVEL sẽ được báo cáo. Một nonComplianceDetail có lý do INVALID_VALUE và lý do cụ thể ONC_WIFI_KEY_PAIR_ALIAS_NOT_CORRESPONDING_TO_EXISTING_KEY sẽ được báo cáo nếu bí danh cặp khoá đã chỉ định không tương ứng với một khoá hiện có. Sau đây là một ví dụ về chính sách:

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

Trường Security cũng có thể là WPA3-Enterprise_192. Đây là mạng WPA-EAP được định cấu hình ở chế độ 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"
      }
   ]
}