Konfigurace protokolu TLS s automatickou správou certifikátů pro zabezpečení komunikace MQTT v Azure IoT MQ Preview
Důležité
Azure IoT Operations Preview – Služba Azure Arc je aktuálně ve verzi PREVIEW. Tento software ve verzi Preview byste neměli používat v produkčních prostředích.
Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.
Protokol TLS můžete nakonfigurovat pro zabezpečení komunikace MQTT mezi zprostředkovatelem MQTT a klientem pomocí prostředku BrokerListener. Protokol TLS můžete nakonfigurovat pomocí ruční nebo automatické správy certifikátů.
Ověření instalace nástroje cert-manager
Pomocí automatické správy certifikátů můžete ke správě certifikátu serveru TLS použít nástroj cert-manager. Ve výchozím nastavení je nástroj cert-manager nainstalovaný společně s Azure IoT Operations Preview v azure-iot-operations
oboru názvů. Než budete pokračovat, ověřte instalaci.
Slouží
kubectl
ke kontrole podů odpovídajících popiskům aplikací nástroje cert-manager.$ kubectl get pods --namespace azure-iot-operations -l 'app in (cert-manager,cainjector,webhook)' NAME READY STATUS RESTARTS AGE aio-cert-manager-64f9548744-5fwdd 1/1 Running 4 (145m ago) 4d20h aio-cert-manager-cainjector-6c7c546578-p6vgv 1/1 Running 4 (145m ago) 4d20h aio-cert-manager-webhook-7f676965dd-8xs28 1/1 Running 4 (145m ago) 4d20h
Pokud se zobrazí pody, které jsou připravené a spuštěné, nainstaluje se cert-manager a je připravený k použití.
Tip
Pokud chcete instalaci dále ověřit, zkontrolujte instalaci v dokumentaci nástroje cert-manager. Nezapomeňte použít azure-iot-operations
obor názvů.
Vytvoření vystavitele pro certifikát serveru TLS
Prostředek vystavitele cert-manager definuje, jak se certifikáty vydávají automaticky. Cert-manager podporuje několik typů vystavitelů nativně. Podporuje také externí typ vystavitele pro rozšíření funkčnosti nad rámec nativně podporovaných vystavitelů. Azure IoT MQ Preview je možné použít s jakýmkoli typem vystavitele cert-manageru.
Důležité
Během počátečního nasazení se operace Azure IoT nainstalují s výchozím vystavitelem pro certifikáty serveru TLS. Tento vystavitel můžete použít pro vývoj a testování. Další informace najdete v tématu Výchozí kořenová certifikační autorita a vystavitel s využitím operací Azure IoT. Následující postup se vyžaduje jenom v případě, že chcete použít jiného vystavitele.
Přístup k vytvoření vystavitele se liší v závislosti na vašem scénáři. Následující části obsahují příklady, které vám pomůžou začít.
Vystavitel certifikační autority je užitečný pro vývoj a testování. Musí být nakonfigurovaný s certifikátem a privátním klíčem uloženým v tajném kódu Kubernetes.
Nastavení kořenového certifikátu jako tajného kódu Kubernetes
Pokud máte existující certifikát certifikační autority, vytvořte tajný klíč Kubernetes s certifikátem certifikační autority a soubory PEM privátního klíče. Spusťte následující příkaz a nastavili jste kořenový certifikát jako tajný klíč Kubernetes a můžete přeskočit další část.
kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations
Pokud certifikát certifikační autority nemáte, může správce certifikátů vygenerovat kořenový certifikát certifikační autority za vás. Použití nástroje cert-manager k vygenerování kořenového certifikátu certifikační autority se označuje jako bootstrapping vystavitele certifikační autority s certifikátem podepsaným svým držitelem.
Začněte vytvořením
ca.yaml
:apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: selfsigned-ca-issuer namespace: azure-iot-operations spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: selfsigned-ca-cert namespace: azure-iot-operations spec: 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
Vytvořte certifikát certifikační autority podepsaný svým držitelem pomocí následujícího příkazu:
kubectl apply -f ca.yaml
Cert-manager vytvoří certifikát certifikační autority pomocí jeho výchozích hodnot. Vlastnosti tohoto certifikátu lze změnit úpravou specifikace certifikátu. Seznam platných možností najdete v dokumentaci k nástroji cert-manager.
Distribuce kořenového certifikátu
Předchozí příklad ukládá certifikát certifikační autority do tajného kódu Kubernetes s názvem test-ca
. Certifikát ve formátu PEM lze načíst z tajného kódu a uložit do souboru ca.crt
pomocí následujícího příkazu:
kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt
Tento certifikát musí být distribuovaný a důvěryhodný všemi klienty. Například použijte --cafile
příznak pro klienta mosquitto.
Azure Key Vault můžete použít ke správě tajných kódů pro IoT MQ místo tajných kódů Kubernetes. Další informace najdete v tématu Správa tajných kódů pomocí služby Azure Key Vault nebo tajných kódů Kubernetes.
Vytvoření vystavitele na základě certifikátu certifikační autority
Cert-manager potřebuje vystavitele na základě certifikátu certifikační autority vygenerovaného nebo importovaného v předchozím kroku. Vytvořte následující soubor takto issuer-ca.yaml
:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: my-issuer
namespace: azure-iot-operations
spec:
ca:
# Must match secretName of generated or imported CA cert
secretName: test-ca
Vytvořte vystavitele pomocí následujícího příkazu:
kubectl apply -f issuer-ca.yaml
Předchozí příkaz vytvoří vystavitele pro vystavování certifikátů serveru TLS. Poznamenejte si název a druh vystavitele. V příkladu název my-issuer
a druh Issuer
. Tyto hodnoty se později nastaví v prostředku BrokerListener.
Povolení protokolu TLS pro port
tls
Upravte nastavení v prostředku BrokerListener tak, aby určil port TLS a vystavitele pro front-endy. Následuje příklad prostředku BrokerListener, který umožňuje protokol TLS na portu 8884 s automatickou správou certifikátů.
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
name: my-new-tls-listener
namespace: azure-iot-operations
spec:
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
Jakmile je prostředek BrokerListener nakonfigurovaný, IoT MQ automaticky vytvoří novou službu se zadaným portem a povoleným protokolem TLS.
Volitelné: Konfigurace parametrů certifikátu serveru
Jediné požadované parametry jsou issuerRef.name
a issuerRef.kind
. Automaticky se vyberou všechny vlastnosti vygenerovaných certifikátů serveru TLS. IoT MQ však umožňuje přizpůsobení určitých vlastností zadáním v prostředku BrokerListener v části tls.automatic.issuerRef
. Následuje příklad všech podporovaných vlastností:
# 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
Ověření nasazení
Pomocí kubectl zkontrolujte, jestli je spuštěná služba přidružená k prostředku BrokerListener. V příkladu výše je my-new-tls-listener
název služby a obor názvů je azure-iot-operations
. Následující příkaz zkontroluje stav služby:
$ kubectl get service my-new-tls-listener -n azure-iot-operations
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-new-tls-listener LoadBalancer 10.43.241.171 XXX.XX.X.X 8884:32457/TCP 33s
Připojení do zprostředkovatele pomocí protokolu TLS
Po nakonfigurování certifikátu serveru je povolený protokol TLS. Testování pomocí moskvitu:
mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt
Argument --cafile
povolí protokol TLS na klientovi mosquitto a určuje, že klient by měl důvěřovat všem certifikátům serveru vydaným daným souborem. Musíte zadat soubor, který obsahuje vystavitele nakonfigurovaného certifikátu serveru TLS.
Nahraďte $HOST
příslušným hostitelem:
- Pokud se připojujete ze stejného clusteru, nahraďte názvem služby zadaným (
my-new-tls-listener
například) nebo službouCLUSTER-IP
. - Pokud se připojujete mimo cluster, služba
EXTERNAL-IP
.
Nezapomeňte v případě potřeby zadat metody ověřování. Například uživatelské jméno a heslo.
Výchozí kořenová certifikační autorita a vystavitel s využitím Azure IoT Operations Preview
Abyste mohli začít, nasadí se operace Azure IoT s výchozí kořenovou certifikační autoritou pro rychlý start a vystavitelem pro certifikáty serveru TLS. Tento vystavitel můžete použít pro vývoj a testování.
Certifikát certifikační autority je podepsaný svým držitelem a není důvěryhodný pro žádné klienty mimo provoz Azure IoT. Předmět certifikátu certifikační autority je
CN = Azure IoT Operations Quickstart Root CA - Not for Production
a jeho platnost vyprší za 30 dnů od doby instalace.Kořenový certifikát certifikační autority je uložený v tajném kódu Kubernetes.
aio-ca-key-pair-test-only
Veřejná část kořenového certifikátu certifikační autority je uložena v objektu ConfigMap s názvem
aio-ca-trust-bundle-test-only
. Certifikát certifikační autority můžete načíst z objektu ConfigMap a zkontrolovat ho pomocí kubectl a openssl.$ kubectl get configmap aio-ca-trust-bundle-test-only -n azure-iot-operations -o json | jq -r '.data["ca.crt"]' | openssl x509 -text -noout Certificate: 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
Ve výchozím nastavení je v oboru názvů
aio-ca-issuer
nakonfigurovaný vystavitel certifikační autorityazure-iot-operations
. Používá se jako společný vystavitel certifikační autority pro všechny certifikáty serveru TLS pro operace IoT. IoT MQ používá vystavitele vytvořeného ze stejného certifikátu certifikační autority k vydávání certifikátů serveru TLS pro výchozí naslouchací proces TLS na portu 8883. Vystavitele můžete zkontrolovat pomocí následujícího příkazu:$ kubectl get issuer aio-ca-issuer -n azure-iot-operations -o yaml apiVersion: cert-manager.io/v1 kind: Issuer metadata: 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-d5a0d3f79162 spec: ca: secretName: aio-ca-key-pair-test-only status: conditions: - lastTransitionTime: "2023-11-01T23:10:59Z" message: Signing CA verified observedGeneration: 1 reason: KeyPairVerified status: "True" type: Ready
V produkčním prostředí musíte nakonfigurovat vystavitele certifikační autority s certifikátem od důvěryhodné certifikační autority, jak je popsáno v předchozích částech.