Konfigurace protokolu TLS s ruční 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ů.
Pokud chcete ručně nakonfigurovat Azure IoT MQ Preview tak, aby používal konkrétní certifikát TLS, zadejte ho v prostředku BrokerListener s odkazem na tajný klíč Kubernetes. Pak ho nasaďte pomocí kubectl. Tento článek ukazuje příklad konfigurace protokolu TLS s certifikáty podepsanými svým držitelem pro testování.
Vytvoření certifikační autority pomocí rozhraní příkazového řádku kroku
Krok je správce certifikátů, který vás rychle zprovozní při vytváření a správě vlastní privátní certifikační autority.
Nainstalujte rozhraní příkazového řádku kroku a vytvořte certifikát a klíč kořenové certifikační autority (CA).
step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.key
Vytvořte certifikát a klíč zprostředkující certifikační autority podepsaný kořenovou certifikační autoritou.
step certificate create --profile intermediate-ca "Example Intermediate CA" intermediate_ca.crt intermediate_ca.key \ --ca root_ca.crt --ca-key root_ca.key
Vytvoření certifikátu serveru
Pomocí rozhraní příkazového řádku krok vytvořte certifikát serveru z podepsaného zprostředkující certifikační autoritou.
step certificate create mqtts-endpoint mqtts-endpoint.crt mqtts-endpoint.key \
--profile leaf \
--not-after 8760h \
--san mqtts-endpoint \
--san localhost \
--ca intermediate_ca.crt --ca-key intermediate_ca.key \
--no-password --insecure
mqtts-endpoint
Tady jsou localhost
alternativní názvy subjektu (SAN) pro front-end zprostředkovatele Azure IoT MQ v Kubernetes a místních klientech. Pokud se chcete připojit přes internet, přidejte --san
externí IP adresu. Příznaky --no-password --insecure
se používají k testování, aby se přeskočí výzvy k zadání hesla a zakázala ochranu heslem pro privátní klíč, protože je uložená v tajném kódu Kubernetes. V produkčním prostředí použijte heslo a privátní klíč uložte do zabezpečeného umístění, jako je Azure Key Vault.
Požadavky na algoritmus klíče certifikátu
Podporují se klíče EC i RSA, ale všechny certifikáty v řetězu musí používat stejný algoritmus klíče. Pokud importujete vlastní certifikáty certifikační autority, ujistěte se, že certifikát serveru používá stejný algoritmus klíče jako certifikační autority.
Import řetězu certifikátů serveru jako tajného kódu Kubernetes
Vytvořte úplný řetěz certifikátů serveru, ve kterém záleží na pořadí certifikátů: certifikát serveru je první certifikát v souboru, zprostředkující je druhý.
cat mqtts-endpoint.crt intermediate_ca.crt > server_chain.pem
Vytvořte tajný klíč Kubernetes s řetězem certifikátů serveru a klíčem serveru pomocí kubectl.
kubectl create secret tls server-cert-secret -n azure-iot-operations \ --cert server_chain.crt \ --key mqtts-endpoint.key
Povolení protokolu TLS pro naslouchací proces
tls
Upravte nastavení v prostředku BrokerListener a určete ruční konfiguraci protokolu TLS odkazující na tajný klíč Kubernetes. Poznamenejte si název tajného klíče použitého pro certifikát serveru TLS (server-cert-secret
v předchozím příkladu).
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
name: manual-tls-listener
namespace: azure-iot-operations
spec:
brokerRef: broker
authenticationEnabled: false # If true, BrokerAuthentication must be configured
authorizationEnabled: false
serviceType: loadBalancer # Optional, defaults to clusterIP
serviceName: mqtts-endpoint # Match the SAN in the server certificate
port: 8885 # Avoid port conflict with default listener at 8883
tls:
manual:
secretName: server-cert-secret
Jakmile se prostředek BrokerListener vytvoří, operátor automaticky vytvoří službu Kubernetes a nasadí naslouchací proces. Stav služby můžete zkontrolovat spuštěním kubectl get svc
příkazu .
Připojení do zprostředkovatele pomocí protokolu TLS
Pokud chcete otestovat připojení TLS s klientem mosquitto, publikujte zprávu a předejte kořenový certifikát certifikační autority v parametru --cafile
.
$ mosquitto_pub -d -h localhost -p 8885 -i "my-client" -t "test-topic" -m "Hello" --cafile root_ca.crt
Client my-client sending CONNECT
Client my-client received CONNACK (0)
Client my-client sending PUBLISH (d0, q0, r0, m1, 'test-topic', ... (5 bytes))
Client my-client sending DISCONNECT
Tip
Pokud chcete použít localhost, musí být port dostupný na hostitelském počítači. Například kubectl port-forward svc/mqtts-endpoint 8885:8885 -n azure-iot-operations
. S některými distribucemi Kubernetes, jako je K3d, můžete přidat přesměrovaný port s k3d cluster edit $CLUSTER_NAME --port-add 8885:8885@loadbalancer
.
Poznámka:
Pokud se chcete připojit k zprostředkovateli, musíte klientům distribuovat kořen důvěryhodnosti, označovaný také jako sada důvěryhodnosti. V tomto případě je kořenem důvěryhodnosti kořenová certifikační autorita vytvořená kořenovou certifikační autoritou podepsanou svým držitelem. Aby klient ověřil řetěz certifikátů serveru, vyžaduje se distribuce kořenového adresáře důvěryhodnosti. Pokud jsou klienti MQTT úlohami v clusteru Kubernetes, musíte také vytvořit objekt ConfigMap s kořenovou certifikační autoritou a připojit ho do podu.
Nezapomeňte zadat uživatelské jméno, heslo atd. pokud je povolené ověřování MQ.
Použití externí IP adresy pro certifikát serveru
Pokud se chcete připojit pomocí protokolu TLS přes internet, musí mít certifikát serveru Azure IoT MQ svůj externí název hostitele jako síť SAN. V produkčním prostředí se obvykle jedná o název DNS nebo dobře známou IP adresu. Během vývoje/testování ale možná nevíte, jaký název hostitele nebo externí IP adresa je přiřazená před nasazením. Pokud chcete tento problém vyřešit, nejprve nasaďte naslouchací proces bez certifikátu serveru, pak vytvořte certifikát serveru a tajný klíč s externí IP adresou a nakonec naimportujte tajný kód do naslouchacího procesu.
Pokud se pokusíte nasadit ukázkový naslouchací proces manual-tls-listener
TLS, ale odkazovaný tajný klíč server-cert-secret
Kubernetes neexistuje, vytvoří se přidružená služba, ale pody se nespustí. Služba se vytvoří, protože operátor musí rezervovat externí IP adresu pro naslouchací proces.
$ kubectl get svc mqtts-endpoint -n azure-iot-operations
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mqtts-endpoint LoadBalancer 10.43.93.6 172.18.0.2 8885:30674/TCP 1m15s
Toto chování se ale očekává a při importu certifikátu serveru je v pořádku ho nechat. Protokoly správce stavu zmíní, že Azure IoT MQ čeká na certifikát serveru.
$ kubectl logs -l app=health-manager -n azure-iot-operations
...
<6>2023-11-06T21:36:13.634Z [INFO] [1] - Server certificate server-cert-secret not found. Awaiting creation of secret.
Poznámka:
Obecně platí, že v distribuovaném systému nejsou protokoly podů deterministické a měly by se používat s opatrností. Správný způsob, jak se dostat k informacím, je prostřednictvím událostí Kubernetes a stavu vlastních prostředků, které jsou v backlogu. Představte si předchozí krok jako dočasné alternativní řešení.
I když front-endové pody nejsou vzhůru, externí IP adresa je už dostupná.
$ kubectl get svc mqtts-endpoint -n azure-iot-operations
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mqtts-endpoint LoadBalancer 10.43.93.6 172.18.0.2 8885:30674/TCP 1m15s
Odsud postupujte stejným postupem jako předtím a vytvořte certifikát serveru s touto externí IP adresou --san
a stejným způsobem vytvořte tajný klíč Kubernetes. Po vytvoření tajného kódu se automaticky naimportuje do naslouchacího procesu.
Související obsah
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro