Skip to content

Commit 90a6180

Browse files
Merge pull request #113981 from wesmc7777/dps_5_11_tls_only
DPS updates for TLS 1.2 support May 11th
2 parents 6a7d0d0 + 6afdc23 commit 90a6180

File tree

2 files changed

+94
-1
lines changed

2 files changed

+94
-1
lines changed

articles/iot-dps/tls-support.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
title: Azure IoT Device Provisioning Service (DPS) TLS support
3+
description: Best practices in using secure TLS connections for devices and services communicating with the IoT Device Provisioning Service (DPS)
4+
services: iot-dps
5+
author: wesmc7777
6+
ms.service: iot-dps
7+
ms.topic: conceptual
8+
ms.date: 05/11/2020
9+
ms.author: wesmc
10+
---
11+
12+
# TLS support in Azure IoT Hub Device Provisioning Service (DPS)
13+
14+
DPS uses Transport Layer Security (TLS) to secure connections from IoT devices. Three versions of the TLS protocol are currently supported, namely versions 1.0, 1.1, and 1.2.
15+
16+
TLS 1.0 and 1.1 are considered legacy and are planned for deprecation. For more information, see [Deprecating TLS 1.0 and 1.1 for IoT Hub](../iot-hub/iot-hub-tls-deprecating-1-0-and-1-1.md). It is strongly recommended that you use TLS 1.2 as the preferred TLS version when connecting to DPS.
17+
18+
## Restrict connections to TLS 1.2
19+
20+
For added security, it is advised to configure your DPS instances to *only* allow device client connections that use TLS version 1.2 and to enforce the use of [recommended ciphers](#recommended-ciphers).
21+
22+
To do this, provision a new DPS resource in any of the [supported regions](#supported-regions) and set the `minTlsVersion` property to `1.2` in your Azure Resource Manager template's DPS resource specification. The following example template JSON specifies the `minTlsVersion` property for a new DPS instance.
23+
24+
```json
25+
{
26+
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
27+
"contentVersion": "1.0.0.0",
28+
"resources": [
29+
{
30+
"type": "Microsoft.Devices/ProvisioningServices",
31+
"apiVersion": "2020-01-01",
32+
"name": "<provide-a-valid-DPS-resource-name>",
33+
"location": "<any-of-supported-regions-below>",
34+
"properties": {
35+
"minTlsVersion": "1.2"
36+
},
37+
"sku": {
38+
"name": "S1",
39+
"capacity": 1
40+
},
41+
}
42+
]
43+
}
44+
```
45+
46+
You can deploy the template with the following Azure CLI command.
47+
48+
```azurecli
49+
az deployment group create -g <your resource group name> --template-file template.json
50+
```
51+
52+
For more information on creating DPS resources with Resource Manager templates, see, [Set up DPS with an Azure Resource Manager template](quick-setup-auto-provision-rm.md).
53+
54+
The DPS resource created using this configuration will refuse devices that attempt to connect using TLS versions 1.0 and 1.1. Similarly, the TLS handshake will be refused if the device client's HELLO message does not list any of the [recommended ciphers](#recommended-ciphers).
55+
56+
> [!NOTE]
57+
> The `minTlsVersion` property is read-only and cannot be changed once your DPS resource is created. It is therefore essential that you properly test and validate that *all* your IoT devices are compatible with TLS 1.2 and the [recommended ciphers](#recommended-ciphers) in advance.
58+
59+
## Supported regions
60+
61+
IoT DPS instances that require the use of TLS 1.2 can be created in the following regions:
62+
63+
* US Gov Arizona
64+
* US Gov Virginia
65+
66+
> [!NOTE]
67+
> Upon failovers, the `minTlsVersion` property of your DPS will remain effective in the geo-paired region post-failover.
68+
69+
## Recommended ciphers
70+
71+
DPS instances that are configured to accept only TLS 1.2 will also enforce the use of the following recommended ciphers:
72+
73+
* `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
74+
* `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
75+
* `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
76+
* `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
77+
78+
## Use TLS 1.2 in the IoT SDKs
79+
80+
Use the links below to configure TLS 1.2 and allowed ciphers in the Azure IoT client SDKs.
81+
82+
| Language | Versions supporting TLS 1.2 | Documentation |
83+
|----------|------------------------------------|---------------|
84+
| C | Tag 2019-12-11 or newer | [Link](https://aka.ms/Tls_C_SDK_IoT) |
85+
| Python | Version 2.0.0 or newer | [Link](https://aka.ms/Tls_Python_SDK_IoT) |
86+
| C# | Version 1.21.4 or newer | [Link](https://aka.ms/Tls_CSharp_SDK_IoT) |
87+
| Java | Version 1.19.0 or newer | [Link](https://aka.ms/Tls_Java_SDK_IoT) |
88+
| NodeJS | Version 1.12.2 or newer | [Link](https://aka.ms/Tls_Node_SDK_IoT) |
89+
90+
91+
## Use TLS 1.2 with IoT Edge
92+
93+
IoT Edge devices can be configured to use TLS 1.2 when communicating with IoT Hub and DPS. For this purpose, use the [IoT Edge documentation page](https://github.com/Azure/iotedge/blob/master/edge-modules/edgehub-proxy/README.md).

articles/iot-dps/toc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
href: quick-setup-auto-provision-cli.md
1616
- name: Azure RM template
1717
href: quick-setup-auto-provision-rm.md
18-
- name: Provision a single simulated device
18+
- name: Provision a single device
1919
items:
2020
- name: Symmetric Key attestation
2121
items:

0 commit comments

Comments
 (0)