Sorry, uw browser ondersteunt geen JavaScript!
Inloggen

MQTTS- en HTTPS-certificaatverificatie configureren op een IAMMETER-energiemeter

IAMMETER-energiemeters met firmware i.91.065.9 of nieuwer kunnen het servercertificaat controleren bij het uploaden via MQTTS of HTTPS. Dit voegt controle van de certificaatketen en serverhostnaam toe aan beveiligde uitgaande verbindingen.

Dit artikel behandelt de TLS-vertrouwensconfiguratie, niet MQTT-topics, JSON-payloads of Home Assistant Discovery. Zie voor MQTT-publicatie MQTT-energiemeter: IAMMETER-gegevens publiceren naar uw MQTT-broker.

Op deze pagina

Een certificaatverificatiemodus kiezen

De MQTTS- en HTTPS-clients van IAMMETER ondersteunen drie modi voor verificatie van het servercertificaat:

Modus Certificaatketen Serverhostnaam Beoogd gebruik
builtin Gecontroleerd met root-CA’s in de firmware Gecontroleerd Aanbevolen voor openbare diensten met een ondersteunde keten
custom Gecontroleerd met een aangeleverde PEM-root-CA Gecontroleerd Private PKI, zelfondertekende installaties of ontbrekende openbare roots
none Niet gecontroleerd Niet gecontroleerd Alleen tijdelijke compatibiliteit of diagnose

Deze instellingen gelden wanneer het IAMMETER-apparaat als TLS-client gegevens naar een MQTTS-broker of HTTPS-server uploadt. Ze schakelen HTTPS op de lokale webserver van het apparaat niet in.

builtin

builtin is de standaardmodus. Deze geldt zolang geen TLS-verificatie-instelling is opgeslagen en wordt hersteld na het verwijderen van de TLS-CA-configuratie of het terugzetten naar fabrieksinstellingen.

De firmware bevat deze root-CA’s:

  • DigiCert Global Root G2
  • ISRG Root X1

Het apparaat controleert zowel de certificaatketen als de serverhostnaam. De MQTTS-broker of HTTPS-server moet een certificaat aanbieden waarvan de keten naar een van deze roots leidt. De Subject Alternative Name (SAN) moet overeenkomen met het ingestelde serveradres.

Bij een IP-adres als uploadadres moet exact dat IP-adres in de SAN staan. Een DNS-naam komt niet overeen met een IP-adres, ook niet wanneer beide dezelfde server aanwijzen.

custom

custom voert dezelfde keten- en hostnaamcontrole uit als builtin, maar vertrouwt het door de beheerder geüploade PEM-CA-certificaat. Gebruik dit wanneer:

  • het servercertificaat door een private CA is uitgegeven;
  • de installatie een zelfondertekend servercertificaat gebruikt; of
  • de benodigde openbare root-CA niet in de firmware zit.

Upload voor een private PKI het root-CA-certificaat. De TLS-server moet tijdens de handshake nog steeds de benodigde tussenliggende certificaten meesturen. Een zelfondertekend servercertificaat kan zelf als vertrouwensanker worden geüpload, maar de SAN moet blijven overeenkomen met de ingestelde hostnaam of het IP-adres.

none

none maakt nog steeds een versleutelde TLS-verbinding, maar controleert de certificaatketen en hostnaam niet. Dit lijkt op het eerdere TLS-gedrag zonder serverauthenticatie.

Deze modus is kwetsbaar voor man-in-the-middle-aanvallen. Gebruik hem alleen tijdelijk voor compatibiliteit of diagnose. Kies in productie bij voorkeur builtin of custom.

Vereisten en belangrijke grenzen

Voor de TLS-CA-configuratie-API’s moet Local Admin Security zijn ingeschakeld. Elk verzoek moet de ingestelde beheerdersnaam en het wachtwoord via HTTP Basic Authentication bevatten.

De computer met curl of Swagger UI moet het lokale IP-adres van het apparaat kunnen bereiken. MQTTS en HTTPS delen één verificatiemodus en één Custom CA. Een wijziging geldt dus voor de beveiligde uploadmodus die het apparaat gebruikt.

Herstart het apparaat na een TLS-wijziging, zodat de uitgaande client opnieuw met de nieuwe instellingen wordt aangemaakt.

De voorbeelden gebruiken deze plaatsaanduidingen:

DEVICE_IP="192.168.1.80"
ADMIN_USER="admin"
ADMIN_PASSWORD="ExamplePassword1"

Vervang ze door het echte apparaatadres en de beheerdersgegevens.

De huidige TLS-modus controleren

API:

GET /api/tls/ca/status

Voorbeeld:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  "http://$DEVICE_IP/api/tls/ca/status"

Voorbeeldantwoord:

{
  "successful": 1,
  "mode": "builtin",
  "customCaValid": 0,
  "customCaLength": 0,
  "customCaSha256": "",
  "restartRequiredAfterChange": 1
}

Het antwoord vermeldt de geselecteerde modus en, indien aanwezig, de lengte en SHA-256-hash van de opgeslagen Custom CA.

builtin-verificatie selecteren

API:

POST /api/tls/ca/select

Voorbeeld:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/select" \
  -H "Content-Type: application/json" \
  -d '{"mode":"builtin"}'

Herstart het apparaat na een succesvol antwoord.

none selecteren voor tijdelijke diagnose

API:

POST /api/tls/ca/select

Voorbeeld:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/select" \
  -H "Content-Type: application/json" \
  -d '{"mode":"none"}'

Het antwoord waarschuwt dat servercertificaatverificatie is uitgeschakeld. Herstart na de moduswijziging en schakel na de diagnose terug naar builtin of custom.

Een Custom CA uploaden en selecteren

Een CA uploaden en custom selecteren zijn afzonderlijke handelingen. Uploaden wijzigt de actieve modus niet automatisch.

Vereisten voor het Custom-CA-bestand

Het geüploade bestand moet aan alle volgende eisen voldoen:

  • PEM-certificaatformaat;
  • onbewerkte verzoekinhoud, geen JSON en geen multipart/form-data;
  • Content-Type: application/x-pem-file;
  • 1 tot en met 3072 bytes, inclusief PEM-headers, regeleinden en witruimte;
  • bevat -----BEGIN CERTIFICATE----- en -----END CERTIFICATE-----;
  • bevat geen privésleutel.

De limiet van 3072 bytes geldt voor de volledige HTTP-verzoekinhoud. Een PEM-bestand van 3072 bytes wordt geaccepteerd; een bestand van 3073 bytes wordt geweigerd.

Controleer vóór het uploaden de bestandsgrootte:

wc -c root-ca.pem

Stap 1: de CA uploaden

API:

POST /api/tls/ca/upload

Voorbeeld:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/upload" \
  -H "Content-Type: application/x-pem-file" \
  --data-binary @root-ca.pem

Voorbeeld van een succesvol antwoord:

{
  "successful": 1,
  "length": 1939,
  "sha256": "64-character SHA-256 digest",
  "message": "CA uploaded; select custom mode and restart"
}

Het apparaat bewaart de CA in meerdere KV-blokken en controleert de opgeslagen lengte en SHA-256-hash voordat deze als actief wordt gemarkeerd. Een onderbroken schrijfactie vervangt de eerdere geldige CA niet.

Stap 2: custom selecteren

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/select" \
  -H "Content-Type: application/json" \
  -d '{"mode":"custom"}'

Het apparaat weigert dit verzoek als er geen geldige Custom CA is opgeslagen. Het valt niet ongemerkt terug op none.

Stap 3: herstarten en controleren

Herstart via de lokale webinterface of gebruik de beveiligde herstart-API:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  "http://$DEVICE_IP/api/restart?reset=false"

Vraag na het opnieuw verbinden de status nogmaals op:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  "http://$DEVICE_IP/api/tls/ca/status"

Controleer of mode op custom staat, customCaValid op 1 staat en lengte en SHA-256-hash overeenkomen met het geüploade certificaat.

De Custom CA verwijderen

API:

POST /api/tls/ca/delete

Voorbeeld:

curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
  -X POST "http://$DEVICE_IP/api/tls/ca/delete"

Verwijderen van de Custom CA herstelt ook de modus builtin. Herstart daarna het apparaat.

IAMMETER Swagger UI gebruiken

U kunt dezelfde API’s testen zonder handmatig curl-opdrachten te schrijven:

IAMMETER WEM API Test - TLS CA

  1. Open WEM API Test op een computer die het lokale IP-adres van het apparaat kan bereiken.
  2. Voer het apparaatadres in, bijvoorbeeld 192.168.1.80, en kies Apply.
  3. Kies Authorize en voer de beheerdersnaam en het wachtwoord in.
  4. Open de groep TLS CA - Authenticated.
  5. Controleer de configuratie met GET /api/tls/ca/status.
  6. Gebruik naar behoefte uploaden, selecteren of verwijderen.
  7. Herstart na wijziging van de modus of het certificaat.

De Swagger-pagina draait in de browser en stuurt verzoeken vanaf die computer rechtstreeks naar het IAMMETER-apparaat. Ze worden niet via IAMMETER Cloud doorgestuurd. De browser heeft dus directe netwerktoegang tot het apparaat-IP nodig.

Problemen met certificaatverificatie oplossen

admin security required

Schakel Local Admin Security in voordat u de TLS-CA-API’s gebruikt. Deze instellingen kunnen niet anoniem worden gewijzigd.

custom CA is missing or invalid

Upload met succes een geldige PEM-CA voordat u custom selecteert. Vraag /api/tls/ca/status op en controleer of customCaValid de waarde 1 heeft.

TLS-verbinding mislukt met builtin of custom

Controleer alle volgende punten:

  • de ingestelde hostnaam of het IP-adres komt overeen met de SAN;
  • het certificaat is momenteel geldig en de apparaatklok klopt;
  • de server stuurt de benodigde tussenliggende certificaten mee;
  • de geselecteerde root-CA heeft het servercertificaat uitgegeven of vertrouwt het via de keten;
  • het apparaat is na de TLS-wijziging herstart.

TLS werkt met none, maar niet met verificatie

Dit wijst meestal op een probleem met de certificaatketen, hostnaam, geldigheidsperiode of apparaatklok. none ingeschakeld laten verbergt de authenticatiefout, maar lost die niet op. Corrigeer de certificaatinstallatie of upload de juiste root-CA en gebruik custom.

Boven