Se connecter via MQTTS
Cette page vous explique comment ouvrir une connexion MQTT 5 depuis un appareil provisionné vers Fundamentum : paramètres TLS, identifiant client et JWT que l'appareil signe avec sa propre clé. Elle précise également quels topics l'appareil peut atteindre.
Avant de commencer
- L'appareil est provisionné, et vous connaissez l'ID de son projet, l'ID de son registre et son numéro de série. Consultez Provisioning.
- L'appareil détient la clé privée correspondant à la clé publique enregistrée lors du provisionnement (
rsa_private.pem). - Vous disposez d'une bibliothèque cliente MQTT 5 compatible avec TLS.
Si vous préférez ne pas l'implémenter vous-même, le daemon Linux et la bibliothèque MCU gèrent la connexion à votre place.
Paramètres de connexion
| Paramètre | Valeur |
|---|---|
| Hôte | mqtts.fundamentum-iot.com |
| Port | 8883 (TLS) |
| Protocole | MQTT 5 |
| TLS | Certificat serveur uniquement ; aucun certificat client |
| Server Name Indication (SNI) | Obligatoire : envoyez mqtts.fundamentum-iot.com |
| CA à approuver | ISRG Root X1 (isrgrootx1.pem de Let's Encrypt) |
| Identifiant client | projects/<project-id>/regions/1/registries/<registry-id>/devices/<serial-number> |
| Nom d'utilisateur | unused |
| Mot de passe | Un JWT signé avec la clé privée de l'appareil |
1. Intégrer la CA
Téléchargez isrgrootx1.pem depuis Let's Encrypt et intégrez-le à votre micrologiciel. Pour inspecter la chaîne de certificats présentée par le broker :
openssl s_client -showcerts -verify 5 -connect mqtts.fundamentum-iot.com:8883
La plupart des bibliothèques envoient le SNI automatiquement. Sur les modems bare-metal, définissez explicitement le nom SNI dans la configuration TLS ; sans lui, la négociation échoue.
Si l'appareil télécharge également des fichiers de micrologiciel, intégrez aussi DigiCert Global Root G2 : les fichiers de micrologiciel sont servis sous cette racine. Consultez Firmware updates (OTA).
2. Signer le JWT de l'appareil
Le mot de passe est un JWT signé avec RS256 à l'aide de la clé privée de l'appareil. Il contient trois claims obligatoires :
| Claim | Valeur |
|---|---|
aud |
L'ID du projet, sous forme de chaîne (par exemple, "123") |
iat |
Date d'émission, en secondes Unix |
exp |
Date d'expiration, en secondes Unix |
Par exemple, en Python avec PyJWT :
import time
import jwt
now = int(time.time())
claims = {"aud": "<project-id>", "iat": now, "exp": now + 3600}
with open("rsa_private.pem") as f:
token = jwt.encode(claims, f.read(), algorithm="RS256")
print(token)
Le même JWT authentifie l'appareil sur l'alternative HTTPS et lors de la recherche dans le registre des appareils en stock.
3. Se connecter
Utilisez l'identifiant client qui identifie votre appareil. La forme courte <project-id>.1.<registry-id>.<serial-number> est également acceptée lorsque la longueur de l'identifiant client est limitée.
Par exemple, avec le client Mosquitto, abonnez-vous à la configuration de l'appareil :
mosquitto_sub -V mqttv5 \
-h mqtts.fundamentum-iot.com -p 8883 --cafile isrgrootx1.pem \
-i "projects/<project-id>/regions/1/registries/<registry-id>/devices/<serial-number>" \
-u unused -P "$JWT" \
-t "registries/<registry-id>/devices/<serial-number>/config"
Le broker refuse la connexion lorsque la signature du JWT ne correspond pas à la clé enregistrée de l'appareil, ou lorsque aud ne correspond pas au projet figurant dans l'identifiant client. Signez un nouveau JWT avant chaque reconnexion.
4. Rester dans les topics de l'appareil
Un appareil ne peut publier et s'abonner que sous son propre préfixe :
registries/<registry-id>/devices/<serial-number>/
| Direction | Suffixe du topic | Objet |
|---|---|---|
| Publication | events, events/<name> |
Télémétrie |
| Publication | states |
États |
| Publication | heartbeat |
Heartbeat |
| Publication | subdevices/<sub-serial-number>/events |
Télémétrie d'un sous-appareil |
| Publication | commands/<id> |
Résultat d'une commande |
| Abonnement | config |
Configuration de l'appareil, envoyée lors de l'abonnement |
| Abonnement | commands |
Commandes |
| Abonnement | actions, custom_actions, custom_actions/<name> |
Actions |
La redirection de ports, les réponses aux actions et les formats de messages sont décrits dans MQTT topics and message formats.
Étapes suivantes
- Envoyer la télémétrie, les états et les heartbeats.
- Passerelles et sous-appareils si l'appareil effectue des remontées pour d'autres appareils.
- MQTT topics and message formats pour tous les topics et toutes les charges utiles.