Azure IoT Hub DPS(Device Provisioning Service)의 TLS 지원

DPS는 TLS(전송 계층 보안)를 사용하여 IoT 디바이스의 연결을 보호합니다.

DPS에서 지원하는 현재 TLS 프로토콜 버전은 다음과 같습니다.

  • TLS 1.2

최소 TLS 버전으로 연결 제한

최소 TLS 버전 이상을 사용하는 디바이스 클라이언트 연결 허용하도록 DPS 인스턴스를 구성할 수 있습니다.

Important

현재 DPS는 TLS 1.2만 지원하므로 DPS 인스턴스를 만들 때 최소 TLS 버전을 지정할 필요가 없습니다. 이 기능은 향후 확장을 위해 제공됩니다.

이렇게 하려면 Azure Resource Manager 템플릿의 DPS 리소스 사양에서 minTlsVersion 속성을 1.2로 설정하여 새 DPS 리소스 설정을 프로비저닝합니다. 다음 예제 템플릿 JSON은 새 DPS 인스턴스의 minTlsVersion 속성을 지정합니다.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Devices/ProvisioningServices",
            "apiVersion": "2020-01-01",
            "name": "<provide-a-valid-DPS-resource-name>",
            "location": "<any-region>",
            "properties": {
                "minTlsVersion": "1.2"
            },
            "sku": {
                "name": "S1",
                "capacity": 1
            },
        }     
    ]
}

다음 Azure CLI 명령을 사용하여 템플릿을 배포할 수 있습니다.

az deployment group create -g <your resource group name> --template-file template.json

Resource Manager 템플릿을 사용하여 DPS 리소스를 만드는 방법에 대한 자세한 내용은 Azure Resource Manager 템플릿을 사용하여 DPS 설정을 참조하세요.

이 구성을 사용하여 만든 DPS 리소스는 TLS 버전 1.0 및 1.1을 사용하여 연결을 시도하는 디바이스를 거부합니다.

참고 항목

minTlsVersion 속성은 읽기 전용이며 DPS 리소스를 만든 후에는 변경할 수 없습니다. 따라서 미리 적절하게 테스트하여 ‘모든’ IoT 디바이스가 TLS 1.2 및 권장 암호화와 호환되는지 확인하는 것이 중요합니다.

참고 항목

장애 조치(failover) 시 DPS의 minTlsVersion 속성은 지리적으로 쌍을 이루는 지역에서 장애 조치 후에도 계속 적용됩니다.

DPS 인스턴스는 다음과 같은 권장 및 레거시 암호화 그룹의 사용을 적용합니다.

권장되는 TLS 1.2 암호화 그룹
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

레거시 암호화 그룹

이 암호화 그룹은 현재 DPS에서 계속 지원되지만 사용이 중단될 예정입니다. 가능하면 위의 권장 암호화 그룹을 사용합니다.

옵션 #1(보안 강화)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1)
TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
옵션 #2(성능 향상)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1)
TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)

상호 TLS 지원

DPS 등록이 X.509 인증에 대해 구성된 경우 DPS에서 상호 TLS(mTLS)가 지원됩니다.

인증서 고정

인증서 고정과 TLS 서버 인증서(리프 인증서라고도 함) 및 DPS 엔드포인트와 연결된 중간 인증서의 필터링을 사용하지 않는 것이 좋습니다. Microsoft에서 거의 또는 전혀 통지하지 않고 이러한 인증서를 자주 회전하기 때문입니다. 꼭 고정해야 한다면 Azure IoT 블로그 게시물에 설명된 대로 루트 인증서만 고정하세요.

IoT SDK에서 TLS 1.2 사용

아래 링크를 사용하여 IoT Hub 클라이언트 SDK에서 TLS 1.2 및 허용되는 암호화를 구성할 수 있습니다.

언어 TLS 1.2를 지원하는 버전 설명서
C 태그 2019-12-11 이상 링크
Python 버전 2.0.0 이상 링크
C# 버전 1.21.4 이상 링크
Java 버전 1.19.0 이상 링크
NodeJS 버전 1.12.2 이상 링크

IoT Hub에서 TLS 1.2 사용

디바이스와 통신할 때 TLS 1.2를 사용하도록 IoT Hub를 구성할 수 있습니다. 자세한 내용은 IoT Hub용 TLS 1.0 및 1.1 사용 중단을 참조하세요.

IoT Edge에서 TLS 1.2 사용

IoT Hub 및 DPS와 통신할 때 TLS 1.2를 사용하도록 IoT Edge 디바이스를 구성할 수 있습니다. 자세한 내용은 IoT Edge 설명서 페이지를 참조하세요.