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 인증서
TLS 핸드셰이크 중에 DPS는 연결 클라이언트에 RSA 키 서버 인증서를 제공합니다. 글로벌 Azure 클라우드의 모든 DPS 인스턴스는 DigiCert 글로벌 루트 G2 인증서에서 발급한 TLS 인증서를 사용합니다.
또한 DigiCert Global Root G2가 예기치 않게 사용 중지되는 경우 중단을 방지하기 위해 디바이스에 Microsoft RSA 루트 인증 기관 2017 인증서를 추가하는 것이 좋습니다. 루트 CA 마이그레이션은 드물지만 최신 보안 환경의 복원력을 위해서는 루트 CA가 손상되거나 긴급 루트 CA 마이그레이션이 필요한 경우에 대비하여 IoT 시나리오를 준비해야 합니다.
모든 디바이스에서 다음 루트 CA를 신뢰하는 것이 좋습니다.
- DigiCert Global G2 루트 CA
- Microsoft RSA root CA 2017
이러한 인증서를 다운로드할 수 있는 링크는 Azure 인증 기관 세부 정보를 참조하세요.
SDK의 인증서 신뢰
Azure IoT 디바이스 SDK는 Azure IoT 서비스에 디바이스를 연결하고 인증합니다. 다른 SDK는 언어 및 버전에 따라 다양한 방법으로 인증서를 관리하지만, 대부분은 코드베이스에 직접 인증서를 고정하는 대신 디바이스의 신뢰할 수 있는 인증서 저장소에 의존합니다. 이 방법은 루트 인증서의 향후 변경 내용을 처리할 수 있는 유연성과 복원력을 제공합니다.
다음 표에는 신뢰할 수 있는 인증서 저장소를 지원하는 SDK 버전이 요약되어 있습니다.
Azure IoT 디바이스 SDK | 지원되는 버전 |
---|---|
C | 현재 지원되는 모든 버전 |
C# | 현재 지원되는 모든 버전 |
Java | 버전 2.x.x 이상 |
Node.js | 현재 지원되는 모든 버전 |
Python | 현재 지원되는 모든 버전 |
인증서 고정
TLS 서버 인증서(리프 인증서라고도 함) 및 DPS 엔드포인트와 연결된 중간 인증서의 인증서 고정 및 필터링은 Microsoft에서 이러한 인증서를 거의 또는 전혀 알림 없이 자주 롤아웃하기 때문에 권장되지 않습니다. 필요한 경우 루트 인증서만 고정합니다.
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 설명서 페이지를 참조하세요.