네트워크 구성

정책을 사용하여 기기에서 Wi-Fi 네트워크를 구성할 수 있습니다. Android Management API는 원래 Chromium 프로젝트의 일부로 개발된 표준 JSON 기반 형식인 공개 네트워크 구성을 사용합니다.

정책에 공개 네트워크 구성을 포함하려면 openNetworkConfiguration 필드를 Policy 리소스에서 설정합니다.

완전 관리형 기기의 경우 사용자가 기기에서 Wi-Fi 설정을 수동으로 구성하지 못하도록 wifiConfigDisabledtrue로 설정하여 선택적으로 방지할 수 있습니다. Policy 리소스에서

지원되는 기능

Android Management API는 공개 네트워크 구성 사양의 하위 집합만 지원합니다.

  • 최상위 객체:
    • Type은 생략하거나 UnencryptedConfiguration으로 설정해야 합니다. 전체 정책이 Android Management API 서비스 내에서 암호화되므로 정책 내에서 네트워크 구성을 암호화할 필요가 없습니다. 또한 비밀번호나 비공개 키와 같은 민감한 정보에 대한 두 번째 암호화 계층이 있습니다.
  • NetworkConfiguration 객체:
    • GUID, Name, Type, WiFi는 지원되는 필드이며 모두 필수입니다.
    • ProxySettings는 선택 필드입니다. 이 필드를 사용하는 경우 ManualPAC (프록시 자동 구성)만 지원됩니다.
    • TypeWiFi로 설정해야 합니다. 다른 유형의 네트워크는 지원되지 않습니다.
  • WiFi 객체:
    • SSIDHexSSID가 지원되며 둘 중 하나는 있어야 합니다.
      • HexSSIDSSID가 모두 설정된 경우 값은 일관되어야 합니다.
    • HiddenSSID가 지원됩니다.
    • AllowGatewayARPPolling은 지원되지 않습니다.
    • SignalStrength는 지원되지 않습니다.
    • AutoConnect: 이 필드는 네트워크가 자동으로 사용 설정되는지 여부를 결정합니다. 이 설정은 기기의 Wi-Fi 설정에서 사용자가 사용할 수 있는 네트워크별 자동 연결 옵션과 독립적입니다.
      • true로 설정하면 네트워크가 사용 설정됩니다. 즉, 사용자가 이 네트워크의 자동 연결을 사용 중지하지 않는 한 Wi-Fi 설정에서 명시적으로 사용자를 선택하지 않아도 기기 가 자동으로 연결할 수 있습니다.
      • `false`로 설정하면 네트워크가 저장된 네트워크 목록에 추가되지만 사용 설정되지는 않습니다. 기기가 자동으로 연결되지 않습니다. 기기가 네트워크에 연결하려면 사용자 가 Wi-Fi 설정에서 네트워크를 한 번 수동으로 선택해야 합니다. 첫 번째 수동 연결 후에는 네트워크가 사용 설정된 것으로 처리되며 사용자가 이 네트워크의 자동 연결을 사용 중지하지 않는 한 기기가 자동으로 연결할 수 있습니다.
    • Security는 필수이며 다음 값이 지원됩니다: - 없음 - WEP-PSK - WPA-PSK - WPA-EAP - WEP-8021X - WPA3-Enterprise_192
  • WEP-PSK 비밀번호의 경우 40비트 (10자리) 또는 104비트 (26자리) 비밀번호만 지원됩니다.
  • 사양에 따르면 WEP-PSK 비밀번호는 0x 접두어로 시작해야 합니다. 하지만 Android 프레임워크와의 일관성을 위해 이 접두어는 필요하지 않습니다.
  • MAC 주소 무작위 지정 모드를 설정하려면 MACAddressRandomizationMode 또는 Automatic 값으로 설정된 MAC 주소 무작위 지정 모드 속성을 사용합니다.Hardware 이 속성은 공개 네트워크 구성 (ONC) 사양에서는 사용할 수 없지만 AMAPI에서 제공되며 Wi-Fi 네트워크를 구성하는 동안 지정할 수 있습니다. 이는 모든 관리 모드의 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, EAP-PWD, PEAP입니다.
  • Certificate 객체:
    • Remove는 지원되지 않습니다. 대신 구성에서 인증서를 생략합니다.
    • TrustBits는 지원되지 않습니다.

여러 Wi-Fi 네트워크

이 예시 정책 프래그먼트는 서로 다른 보안 체계로 구성된 세 개의 Wi-Fi 네트워크를 보여줍니다. 공개 네트워크 구성 JSON은 Policy JSON의 openNetworkConfiguration 필드 내에 중첩됩니다.

"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 필드를 사용하여 Wi-Fi 인증에 사용되는 설치된 ( DevicePolicyManager.installKeyPair 참고) 또는 생성된 (DevicePolicyManager.generateKeyPair 참고) KeyChain 키 쌍의 별칭을 지정할 수 있습니다. Android 12 이상에서는 ClientCertKeyPairAlias로 지정된 별칭이 있는 KeyChain 키 쌍이 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 192비트 모드로 구성된 WPA-EAP 네트워크인 WPA3-Enterprise_192일 수도 있습니다.

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