Đị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 một thiết bị. API quản lý Android sử dụng Cấu hình mạng mở, một định dạng chuẩn dựa trên JSON, ban đầu được phát triển trong dự án Chromium. Hãy tham khảo thông số kỹ thuật để biết đầy đủ thông tin chi tiết về Cấu hình mạng mở.

Để đưa Cấu hình mạng mở vào một 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ị được quản lý đầy đủ, bạn có thể ngăn người dùng định cấu hình theo cách thủ công các chế độ cài đặt Wi-Fi 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 tập hợp con thông số kỹ thuật Cấu hình mạng mở.

  • Đối tượng cấp cao nhất:
    • 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 đượ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, chẳng hạn 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à tất cả đều bắt buộc.
    • ProxySettings là trường không bắt buộc. Nếu bạn sử dụng thuộc tính này, thì chỉ ManualPAC (Tự động cấu hình proxy) được hỗ trợ.
    • Phải đặt Type thành WiFi. Các loại mạng khác không được hỗ trợ.
  • Đối tượng WiFi:
    • AllowGatewayARPPolling không được hỗ trợ.
    • SignalStrength không được hỗ trợ.
    • Security là bắt buộc và các giá trị sau được hỗ trợ: - Không có - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
    • Đối với cụm mật khẩu WEP-PSK, chỉ các cụm mật khẩu 40 bit (10 chữ số) hoặc 104 bit (26 chữ số) mới được hỗ trợ.
    • Thông số kỹ thuật cho biết rằng cụm mật khẩu WEP-PSK phải bắt đầu bằng tiền tố 0x. Tuy nhiên, để đảm bảo tính nhất quán với Khung Android, bạn không bắt buộc phải sử dụng tiền tố này.
    • Để đặt Chế độ ngẫu nhiên môi trường MAC, hãy sử dụng thuộc tính MACAddressRandomizationMode được đặt với các giá trị Hardware hoặc Automatic. Thuộc tính này hiện không có trong thông số kỹ thuật 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 mạng.
      • Automatic cho phép khung Wi-Fi tự động quyết định chiến lược sắp xếp ngẫu nhiên MAC. Đây có thể là các địa chỉ MAC cố định hoặc không cố định được tạo ngẫu nhiên. Các địa chỉ này có thể được dùng trong khi kết nối với mạng.
  • Đối tượng EAP:
    • ClientCertPattern không được hỗ trợ.
    • SaveCredentials không được hỗ trợ.
    • UseSystemCAs không được hỗ trợ.
    • DomainSuffixMatch được hỗ trợ.
      Các cấu hình không dây dành cho doanh nghiệp không có trường này (hoặc có giá trị là danh sách trống) sẽ bị 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").
    • ClientCertType chỉ hỗ trợ giá trị Ref
    • Các giá trị sau đây được hỗ trợ cho Inner: MSCHAPv2, PAP
    • Outer hỗ trợ những giá trị sau: EAP-AKA, EAP-TLS, EAP-TTLS, EAP-SIM, PEAP
  • Đối tượng Certificate:
    • Remove không được hỗ trợ. 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

Mảnh chính sách trong ví dụ này cho thấy 3 mạng Wi-Fi được định cấu hình bằng các cơ chế 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

Mảnh chính sách trong 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ỉ ứng dụng 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"
               ],
               "ServerCARef": "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à dùng trường ClientCertKeyPairAlias để chỉ định bí danh của một khoá đã cài đặt (xem DevicePolicyManager.installKeyPair) hoặc đã tạo (xem DevicePolicyManager.generateKeyPair) cặp khoá KeyChain dùng để xác thực Wi-Fi. Trên Android 12 trở lên, cặp khoá KeyChain có bí danh được chỉ định bằng ClientCertKeyPairAlias sẽ được cấp để xác thực mạng Wi-Fi và dùng để xác thực mạng Wi-Fi tương ứng. Dưới Android 12, nonComplianceDetail với lý do API_LEVEL sẽ được báo cáo. Một nonComplianceDetail với 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á được 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"
               ],
               "ServerCARef": "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 với 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",
               "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"
      }
   ]
}