|
| 1 | +--- |
| 2 | +title: Certificate management for Azure IoT Operations Preview internal communication |
| 3 | +description: Azure IoT Operations Preview uses TLS to encrypt communication. Learn about the default setup and also how to bring your own CA for production. |
| 4 | +author: PatAltimore |
| 5 | +ms.author: patricka |
| 6 | +ms.subservice: azure-mqtt-broker |
| 7 | +ms.topic: concept-article |
| 8 | +ms.date: 10/01/2024 |
| 9 | + |
| 10 | +#CustomerIntent: As an operator, I want to configure Azure IoT Operations components to use TLS so that I have secure communication between all components. |
| 11 | +--- |
| 12 | + |
| 13 | +# Certificate management for Azure IoT Operations Preview internal communication |
| 14 | + |
| 15 | +All communication within Azure IoT Operations Preview is encrypted using TLS. To help you get started, Azure IoT Operations is deployed with a default root CA and issuer for TLS server certificates. You can use the default setup for development and testing purposes. For a production deployment, we recommend using your own CA issuer and an enterprise PKI solution. |
| 16 | + |
| 17 | +## Default root CA and issuer for TLS server certificates |
| 18 | + |
| 19 | +To help you get started, Azure IoT Operations Preview is deployed with a default root CA and issuer for TLS server certificates. You can use this issuer for development and testing. Azure IoT Operations uses [cert-manager](https://cert-manager.io/docs/) to manage TLS certificates, and [trust-manager](https://cert-manager.io/docs/trust/) to distribute trust bundles to components. |
| 20 | + |
| 21 | +* The CA certificate is self-signed and not trusted by any clients outside of Azure IoT Operations. The subject of the CA certificate is `CN=Azure IoT Operations Quickstart Root CA - Not for Production`. The CA certificate is automatically rotated by cert-manager. |
| 22 | + |
| 23 | +* The root CA certificate is stored in a Kubernetes secret called `azure-iot-operations-aio-ca-certificate` under the `cert-manager` namespace. |
| 24 | + |
| 25 | +* The public portion of the root CA certificate is stored in a ConfigMap called `azure-iot-operations-aio-ca-trust-bundle` under the `azure-iot-operations` namespace. You can retrieve the CA certificate from the ConfigMap and inspect it with kubectl and openssl. The ConfigMap is kept updated by trust-manager when the CA certificate is rotated by cert-manager. |
| 26 | + |
| 27 | + ```bash |
| 28 | + kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o "jsonpath={.data['ca\.crt']}" | openssl x509 -text -noout |
| 29 | + ``` |
| 30 | + |
| 31 | + ```Output |
| 32 | + Certificate: |
| 33 | + Data: |
| 34 | + Version: 3 (0x2) |
| 35 | + Serial Number: |
| 36 | + <SERIAL-NUMBER> |
| 37 | + Signature Algorithm: sha256WithRSAEncryption |
| 38 | + Issuer: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production |
| 39 | + Validity |
| 40 | + Not Before: Sep 18 20:42:19 2024 GMT |
| 41 | + Not After : Sep 18 20:42:19 2025 GMT |
| 42 | + Subject: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production |
| 43 | + Subject Public Key Info: |
| 44 | + Public Key Algorithm: rsaEncryption |
| 45 | + Public-Key: (2048 bit) |
| 46 | + Modulus: <MODULUS> |
| 47 | + Exponent: 65537 (0x10001) |
| 48 | + X509v3 extensions: |
| 49 | + X509v3 Key Usage: critical |
| 50 | + Certificate Sign, CRL Sign |
| 51 | + X509v3 Basic Constraints: critical |
| 52 | + CA:TRUE |
| 53 | + X509v3 Subject Key Identifier: |
| 54 | + <SUBJECT-KEY-IDENTIFIER> |
| 55 | + Signature Algorithm: sha256WithRSAEncryption |
| 56 | + [Signature] |
| 57 | + ``` |
| 58 | + |
| 59 | +* By default, there's already a CA issuer configured in the `azure-iot-operations namespace` called `azure-iot-operations-aio-certificate-issuer`. It's used as the common CA issuer for all TLS server certificates for IoT Operations. MQTT broker uses an issuer created from the same CA certificate to issue TLS server certificates for the default TLS listener on port 18883. You can inspect the issuer with the following command: |
| 60 | + |
| 61 | + ```bash |
| 62 | + kubectl get clusterissuer azure-iot-operations-aio-certificate-issuer -o yaml |
| 63 | + ``` |
| 64 | + |
| 65 | + ```Output |
| 66 | + apiVersion: cert-manager.io/v1 |
| 67 | + kind: ClusterIssuer |
| 68 | + metadata: |
| 69 | + creationTimestamp: "2024-09-18T20:42:17Z" |
| 70 | + generation: 1 |
| 71 | + name: azure-iot-operations-aio-certificate-issuer |
| 72 | + resourceVersion: "36665" |
| 73 | + uid: 592700a6-95e0-4788-99e4-ea93934bd330 |
| 74 | + spec: |
| 75 | + ca: |
| 76 | + secretName: azure-iot-operations-aio-ca-certificate |
| 77 | + status: |
| 78 | + conditions: |
| 79 | + - lastTransitionTime: "2024-09-18T20:42:22Z" |
| 80 | + message: Signing CA verified |
| 81 | + observedGeneration: 1 |
| 82 | + reason: KeyPairVerified |
| 83 | + status: "True" |
| 84 | + type: Ready |
| 85 | + ``` |
0 commit comments