Konfigurieren von TLS mit automatischer Zertifikatverwaltung zum Sichern der MQTT-Kommunikation - Azure IoT Operations Preview (2024)

  • Artikel

Wichtig

Die von Azure Arc aktivierte Azure IoT Operations Preview befindet sich derzeit in der VORSCHAU.Sie sollten diese Vorschausoftware nicht in Produktionsumgebungen verwenden.

Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.

Sie können TLS mit einer BrokerListener-Ressource konfigurieren, um die MQTT-Kommunikation zwischen MQTT-Broker und -Client zu sichern. Sie können TLS mit manueller oder automatischer Zertifikatverwaltung konfigurieren.

Überprüfen der Installation von cert-manager

Bei der automatischen Zertifikatverwaltung verwenden Sie den cert-manager, um das TLS-Serverzertifikat zu verwalten. Standardmäßig wird cert-manager bereits zusammen mit Azure IoT Einsatz Preview im azure-iot-operations-Namespace installiert. Überprüfen Sie die Installation, bevor Sie fortfahren.

  1. Verwenden Sie kubectl, um nach den Pods zu suchen, die den App-Bezeichnungen von cert-manager entsprechen.

    $ kubectl get pods --namespace azure-iot-operations -l 'app in (cert-manager,cainjector,webhook)'NAME READY STATUS RESTARTS AGEaio-cert-manager-64f9548744-5fwdd 1/1 Running 4 (145m ago) 4d20haio-cert-manager-cainjector-6c7c546578-p6vgv 1/1 Running 4 (145m ago) 4d20haio-cert-manager-webhook-7f676965dd-8xs28 1/1 Running 4 (145m ago) 4d20h
  2. Wenn die Pods als betriebsbereit und in Ausführung angezeigt werden, ist der cert-manager installiert und kann verwendet werden.

Tipp

Um die Installation genauer zu überprüfen, sehen Sie sich die Dokumentation Überprüfen der Installation für cert-manager an. Denken Sie daran, den azure-iot-operations-Namespace zu verwenden.

Erstellen eines Zertifikatausstellers für das TLS-Serverzertifikat

Die Zertifikataussteller-Ressource von cert-manager definiert, wie Zertifikate automatisch ausgestellt werden. cert-manager unterstützt nativ mehrere Zertifikatausstellertypen. Die Anwendung unterstützt außerdem einen externen Zertifikatausstellertyp, um die Funktionalität über die nativ unterstützten Zertifikataussteller hinaus zu erweitern. Azure IoTMQ Preview kann mit jedem cert-manager-Ausstellertyp verwendet werden.

Wichtig

Während der ersten Bereitstellung wird AzureIoT Operations mit einem Standardzertifikataussteller für TLS-Serverzertifikate installiert. Sie können diesen Zertifikataussteller für Entwicklungs- und Testzwecke nutzen. Weitere Informationen finden Sie unter Standardstammzertifizierungsstelle und -zertifikataussteller in AzureIoT Operations. Die folgenden Schritte sind nur erforderlich, wenn Sie einen anderen Zertifikataussteller verwenden möchten.

Der Ansatz zum Erstellen des Zertifikatausstellers unterscheidet sich je nach Szenario. In den folgenden Abschnitten werden Beispiele aufgeführt, die Ihnen bei den ersten Schritten helfen.

  • Entwicklung oder Test
  • Produktion

Der Zertifikataussteller ist für Entwicklungs- und Testzwecke nützlich. Er muss mit einem Zertifikat und einem privaten Schlüssel konfiguriert werden, der in einem Kubernetes-Geheimnis gespeichert ist.

Einrichten eines Stammzertifikats als Kubernetes-Geheimnis

Wenn Sie über ein vorhandenes Zertifizierungsstellenzertifikat verfügen, erstellen Sie ein Kubernetes-Geheimnis mit dem Zertifizierungsstellenzertifikat und den privaten PEM-Schlüsseldateien. Führen Sie den folgenden Befehl aus. Dadurch haben Sie das Stammzertifikat als Kubernetes-Geheimnis eingerichtet und können den nächsten Abschnitt überspringen.

kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations

Wenn Sie nicht über ein Zertifizierungsstellenzertifikat verfügen, kann cert-manager ein Zertifikat der Stammzertifizierungsstelle für Sie generieren. Die Verwendung von cert-manager zum Generieren eines Zertifikats der Stammzertifizierungsstelle wird als Bootstrapping eines Zertifikatausstellers mit einem selbstsignierten Zertifikat bezeichnet.

  1. Erstellen Sie zunächst ca.yaml:

    apiVersion: cert-manager.io/v1kind: Issuermetadata: name: selfsigned-ca-issuer namespace: azure-iot-operationsspec: selfSigned: {}---apiVersion: cert-manager.io/v1kind: Certificatemetadata: name: selfsigned-ca-cert namespace: azure-iot-operationsspec: isCA: true commonName: test-ca secretName: test-ca issuerRef: # Must match Issuer name above name: selfsigned-ca-issuer # Must match Issuer kind above kind: Issuer group: cert-manager.io # Override default private key config to use an EC key privateKey: rotationPolicy: Always algorithm: ECDSA size: 256
  2. Erstellen Sie mit dem folgenden Befehl das selbstsignierte Zertifizierungsstellenzertifikat:

    kubectl apply -f ca.yaml

cert-manager erstellt ein Zertifizierungsstellenzertifikat mithilfe seiner Standardwerte. Die Eigenschaften dieses Zertifikats können durch Ändern der Zertifikatsspezifikation geändert werden. Eine Liste der gültigen Optionen finden Sie in Dokumentation von cert-manager.

Verteilen des Stammzertifikats

Im vorherigen Beispiel wird das Zertifizierungsstellenzertifikat in einem Kubernetes-Geheimnis mit dem Namen test-ca gespeichert. Das Zertifikat im PEM-Format kann aus dem Geheimnis abgerufen und mit dem folgenden Befehl in einer ca.crt-Datei gespeichert werden:

kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt

Dieses Zertifikat muss von allen Clients verteilt und als vertrauenswürdig eingestuft werden. Verwenden Sie z.B. das --cafile-Flag für einen mosquitto-Client.

Sie können Azure Key Vault verwenden, um Geheimnisse für IoTMQ anstelle von Kubernetes-Geheimnissen zu verwalten. Weitere Informationen finden Sie unter Verwalten von Geheimnissen mithilfe von Azure Key Vault- oder Kubernetes-Geheimnissen.

Erstellen eines Zertifikatausstellers basierend auf einem Zertifizierungsstellenzertifikat

cert-manager benötigt einen Zertifikataussteller, der auf dem im vorherigen Schritt generierten oder importierten Zertifizierungsstellenzertifikat basiert. Erstellen Sie die folgende Datei als issuer-ca.yaml:

apiVersion: cert-manager.io/v1kind: Issuermetadata: name: my-issuer namespace: azure-iot-operationsspec: ca: # Must match secretName of generated or imported CA cert secretName: test-ca

Erstellen Sie den Zertifikataussteller mit dem folgenden Befehl:

kubectl apply -f issuer-ca.yaml

Der vorherige Befehl erstellt einen Zertifikataussteller für die Ausgabe der TLS-Serverzertifikate. Notieren Sie sich den Namen und die Art des Zertifikatausstellers. Im Beispiel lauten der Name my-issuer und die Art Issuer. Diese Werte werden später in der BrokerListener-Ressource festgelegt.

Aktivieren von TLS für einen Port

Ändern Sie die Einstellung tls in einer BrokerListener-Ressource, um einen TLS-Port und Zertifikataussteller für die Frontends anzugeben. Im Folgenden sehen Sie ein Beispiel für eine BrokerListener-Ressource, die TLS auf Port8884 mit automatischer Zertifikatverwaltung aktiviert.

apiVersion: mq.iotoperations.azure.com/v1beta1kind: BrokerListenermetadata: name: my-new-tls-listener namespace: azure-iot-operationsspec: brokerRef: broker authenticationEnabled: false # If set to true, a BrokerAuthentication resource must be configured authorizationEnabled: false serviceType: loadBalancer # Optional; defaults to 'clusterIP' serviceName: my-new-tls-listener # Avoid conflicts with default service name 'aio-mq-dmqtt-frontend' port: 8884 # Avoid conflicts with default port 8883 tls: automatic: issuerRef: name: my-issuer kind: Issuer

Nachdem die BrokerListener-Ressource konfiguriert wurde, erstellt IoTMQ automatisch einen neuen Dienst mit dem angegebenen Port und aktiviertem TLS.

Optional: Konfigurieren von Serverzertifikatparametern

Die einzig erforderlichen Parameter sind issuerRef.name und issuerRef.kind. Alle Eigenschaften der generierten TLS-Serverzertifikate werden automatisch ausgewählt. IoTMQ ermöglicht jedoch das Anpassen bestimmter Eigenschaften durch Angabe in der BrokerListener-Ressource unter tls.automatic.issuerRef. Im Folgenden sehen Sie ein Beispiel für alle unterstützten Eigenschaften:

# cert-manager issuer for TLS server certificate. Required.issuerRef: # Name of issuer. Required. name: my-issuer # 'Issuer' or 'ClusterIssuer'. Required. kind: Issuer # Issuer group. Optional; defaults to 'cert-manager.io'. # External issuers may use other groups. group: cert-manager.io# Namespace of certificate. Optional; omit to use default namespace.namespace: az# Where to store the generated TLS server certificate. Any existing# data at the provided secret will be overwritten.# Optional; defaults to 'my-issuer-{port}'.secret: my-issuer-8884# Parameters for the server certificate's private key.# Optional; defaults to rotationPolicy: Always, algorithm: ECDSA, size: 256.privateKey: rotationPolicy: Always algorithm: ECDSA size: 256# Total lifetime of the TLS server certificate. Optional; defaults to '720h' (30 days).duration: 720h# When to begin renewing the certificate. Optional; defaults to '240h' (10 days).renewBefore: 240h# Any additional SANs to add to the server certificate. Omit if not required.san: dns: - iotmq.example.com ip: - 192.168.1.1

Überprüfen der Bereitstellung

Verwenden Sie kubectl, um zu überprüfen, ob der Dienst, der der BrokerListener-Ressource zugeordnet ist, ausgeführt wird. Im obigen Beispiel lauten der Dienstname my-new-tls-listener und der Namespace azure-iot-operations. Sie können den Dienststatus mithilfe des folgenden Befehls überprüfen:

$ kubectl get service my-new-tls-listener -n azure-iot-operationsNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEmy-new-tls-listener LoadBalancer 10.43.241.171 XXX.XX.X.X 8884:32457/TCP 33s

Herstellen einer Verbindung mit dem Broker mit TLS

Nachdem das Serverzertifikat konfiguriert wurde, ist TLS aktiviert. So testen Sie es mit mosquitto:

mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt

Das Argument --cafile aktiviert TLS auf dem mosquitto-Client und gibt an, dass der Client allen Serverzertifikaten vertrauen soll, die von der angegebenen Datei ausgestellt wurden. Sie müssen eine Datei angeben, die den Zertifikataussteller des konfigurierten TLS-Serverzertifikats enthält.

Ersetzen Sie $HOST durch den entsprechenden Host:

  • Wenn eine Verbindung innerhalb desselben Clusters hergestellt wird, ersetzen Sie den Wert durch den vergebenen Dienstnamen (im Beispiel my-new-tls-listener) oder den CLUSTER-IP-Dienst.
  • Wenn eine Verbindung von außerhalb des Clusters hergestellt wird, verwenden Sie den EXTERNAL-IP-Dienst.

Denken Sie daran, bei Bedarf Authentifizierungsmethoden anzugeben. Dies können zum Beispiel der Benutzername und das Kennwort sein.

Standard-Stammzertifizierungsstelle und -aussteller in Azure IoT Einsatz Preview

Um Ihnen den Einstieg zu erleichtern, wird AzureIoT Operations mit einer standardmäßigen „Schnellstart“-Stammzertifizierungsstelle und einem -Zertifikataussteller für TLS-Serverzertifikate bereitgestellt. Sie können diesen Zertifikataussteller für Entwicklungs- und Testzwecke nutzen.

  • Das Zertifizierungsstellenzertifikat ist selbstsigniert und wird von jeglichen Clients außerhalb von AzureIoT Operations als nicht vertrauenswürdig eingestuft. Der Betreff des Zertifizierungsstellenzertifikats lautet CN = Azure IoT Operations Quickstart Root CA - Not for Production, und es läuft 30Tage nach der Installation ab.

  • Das Zertifikat der Stammzertifizierungsstelle wird in einem Kubernetes-Geheimnis namens aio-ca-key-pair-test-only gespeichert.

  • Der öffentliche Teil des Stammzertifizierungsstellenzertifikats wird in einer ConfigMap mit dem Namen aio-ca-trust-bundle-test-only gespeichert. Sie können das Zertifizierungsstellenzertifikat aus der ConfigMap abrufen und mit kubectl und openssl überprüfen.

    $ kubectl get configmap aio-ca-trust-bundle-test-only -n azure-iot-operations -o json | jq -r '.data["ca.crt"]' | openssl x509 -text -nooutCertificate: Data: Version: 3 (0x2) Serial Number: 74:d8:b6:fe:63:5a:7d:24:bd:c2:c0:25:c2:d2:c7:94:66:af:36:89 Signature Algorithm: ecdsa-with-SHA256 Issuer: CN = Azure IoT Operations Quickstart Root CA - Not for Production Validity Not Before: Nov 2 00:34:31 2023 GMT Not After : Dec 2 00:34:31 2023 GMT Subject: CN = Azure IoT Operations Quickstart Root CA - Not for Production Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:51:43:93:2c:dd:6b:7e:10:18:a2:0f:ca:2e:7b: bb:ba:5c:78:81:7b:06:99:b5:a8:11:4f:bb:aa:0d: e0:06:4f:55:be:f9:5f:9e:fa:14:75:bb:c9:01:61: 0f:20:95:cd:9b:69:7c:70:98:f8:fa:a0:4c:90:da: 5b:1a:d7:e7:6b ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Certificate Sign X509v3 Subject Key Identifier: B6:DD:8A:42:77:05:38:7A:51:B4:8D:8E:3F:2A:D1:79:32:E9:43:B9 Signature Algorithm: ecdsa-with-SHA256 30:44:02:20:21:cd:61:d7:21:86:fd:f8:c3:6d:33:36:53:e3: a6:06:3c:a6:80:14:13:55:16:f1:19:a8:85:4b:e9:5d:61:eb: 02:20:3e:85:8a:16:d1:0f:0b:0d:5e:cd:2d:bc:39:4b:5e:57: 38:0b:ae:12:98:a9:8f:12:ea:95:45:71:bd:7c:de:9d
  • Standardmäßig ist bereits ein Zertifikataussteller mit dem Namen aio-ca-issuer im azure-iot-operations-Namespace konfiguriert. Er wird als gemeinsamer Zertifizierungsstellenherausgeber für alle TLS-Serverzertifikate für IoT Operations verwendet. IoTMQ verwendet einen Zertifikataussteller, der aus demselben Zertifizierungsstellenzertifikat erstellt wurde, um TLS-Serverzertifikate für den Standard-TLS-Listener auf Port8883 auszustellen. Sie können den Zertifikataussteller mit dem folgenden Befehl überprüfen:

    $ kubectl get issuer aio-ca-issuer -n azure-iot-operations -o yamlapiVersion: cert-manager.io/v1kind: Issuermetadata: annotations: meta.helm.sh/release-name: azure-iot-operations meta.helm.sh/release-namespace: azure-iot-operations creationTimestamp: "2023-11-01T23:10:24Z" generation: 1 labels: app.kubernetes.io/managed-by: Helm name: aio-ca-issuer namespace: azure-iot-operations resourceVersion: "2036" uid: c55974c0-e0c3-4d35-8c07-d5a0d3f79162spec: ca: secretName: aio-ca-key-pair-test-onlystatus: conditions: - lastTransitionTime: "2023-11-01T23:10:59Z" message: Signing CA verified observedGeneration: 1 reason: KeyPairVerified status: "True" type: Ready

Für die Produktion müssen Sie einen Zertifizierungsstellenherausgeber mit einem Zertifikat einer vertrauenswürdigen Zertifizierungsstelle konfigurieren, wie in den vorherigen Abschnitten beschrieben wurde.

Zugehöriger Inhalt

  • Informationen zur BrokerListener-Ressource
  • Konfigurieren der Autorisierung für einen BrokerListener
  • Konfigurieren der Authentifizierung für einen BrokerListener
  • Konfigurieren der TLS mit manueller Zertifikatverwaltung
Konfigurieren von TLS mit automatischer Zertifikatverwaltung zum Sichern der MQTT-Kommunikation - Azure IoT Operations Preview (2024)
Top Articles
Latest Posts
Article information

Author: Carlyn Walter

Last Updated:

Views: 6270

Rating: 5 / 5 (50 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Carlyn Walter

Birthday: 1996-01-03

Address: Suite 452 40815 Denyse Extensions, Sengermouth, OR 42374

Phone: +8501809515404

Job: Manufacturing Technician

Hobby: Table tennis, Archery, Vacation, Metal detecting, Yo-yoing, Crocheting, Creative writing

Introduction: My name is Carlyn Walter, I am a lively, glamorous, healthy, clean, powerful, calm, combative person who loves writing and wants to share my knowledge and understanding with you.