Cum configurezi verificarea certificatelor MQTTS și HTTPS pe un contor IAMMETER
Contoarele IAMMETER cu firmware i.91.065.9 sau ulterior pot verifica certificatul serverului când încarcă date prin MQTTS ori HTTPS. Aceasta adaugă verificarea lanțului de certificate și a numelui gazdei pentru conexiunile securizate de ieșire.
Articolul se concentrează pe configurarea încrederii TLS. Nu configurează topicuri MQTT, payload-uri JSON sau descoperirea Home Assistant. Pentru publicarea MQTT, vezi Contor MQTT: publică date IAMMETER către brokerul tău MQTT.
Pe această pagină
- Alege un mod de verificare a certificatelor
- Cerințe și limite importante
- Verifică modul TLS curent
- Selectează verificarea builtin
- Selectează none pentru diagnosticare temporară
- Încarcă și selectează o CA personalizată
- Șterge CA personalizată
- Folosește IAMMETER Swagger UI
- Depanează verificarea certificatelor
Alege un mod de verificare a certificatelor
Clienții MQTTS și HTTPS IAMMETER acceptă trei moduri de verificare a certificatului serverului:
| Mod | Lanț de certificate | Numele gazdei serverului | Utilizare |
|---|---|---|---|
builtin |
Verificat cu CA rădăcină incluse în firmware | Verificat | Recomandat pentru servicii publice cu un lanț acceptat |
custom |
Verificat cu o CA rădăcină PEM furnizată de utilizator | Verificat | PKI privată, certificate autosemnate sau rădăcini publice neincluse |
none |
Neverificat | Neverificat | Numai compatibilitate temporară sau diagnosticare |
Setările se aplică atunci când dispozitivul IAMMETER este client TLS și încarcă date către un broker MQTTS sau server HTTPS. Ele nu activează HTTPS pe serverul Web local al dispozitivului.
builtin
builtin este modul implicit. Este folosit dacă nu s-a salvat anterior o setare de verificare TLS și este restabilit după ștergerea configurației TLS CA sau resetarea dispozitivului la valorile din fabrică.
Firmware-ul conține aceste CA rădăcină:
- DigiCert Global Root G2
- ISRG Root X1
Dispozitivul verifică atât lanțul de certificate, cât și numele gazdei. Brokerul MQTTS sau serverul HTTPS trebuie să prezinte un certificat al cărui lanț ajunge la una dintre aceste rădăcini, iar Subject Alternative Name (SAN) trebuie să corespundă adresei serverului configurate.
Dacă adresa de încărcare este un IP, certificatul trebuie să conțină exact acel IP în SAN. Un nume DNS nu corespunde unei adrese IP, chiar dacă ambele indică același server.
custom
custom verifică lanțul și numele gazdei la fel ca builtin, dar acordă încredere certificatului CA PEM încărcat de administrator. Folosește-l când:
- certificatul serverului este emis de o CA privată;
- implementarea folosește un certificat de server autosemnat; sau
- CA rădăcină publică necesară nu este inclusă în firmware.
Pentru o PKI privată, încarcă certificatul CA rădăcină. Serverul TLS trebuie totuși să trimită certificatele intermediare necesare în timpul negocierii. Un certificat de server autosemnat poate fi încărcat ca ancoră de încredere, dar SAN trebuie în continuare să corespundă numelui gazdei sau IP-ului configurat.
none
none stabilește în continuare o conexiune TLS criptată, dar nu verifică lanțul de certificate sau numele gazdei. Este similar comportamentului TLS vechi, fără autentificarea serverului.
Acest mod este vulnerabil la atacuri de tip man-in-the-middle. Folosește-l doar temporar pentru compatibilitate sau diagnosticare. În producție, preferă builtin sau custom.
Cerințe și limite importante
API-urile de configurare TLS CA necesită activarea Local Admin Security. Fiecare cerere trebuie să includă numele de utilizator și parola administratorului configurat prin HTTP Basic Authentication.
Computerul care rulează curl sau Swagger UI trebuie să poată accesa IP-ul local al dispozitivului. Clienții MQTTS și HTTPS folosesc în comun un mod de verificare și o CA personalizată, deci schimbarea se aplică modului securizat de încărcare folosit de dispozitiv.
Repornește dispozitivul după modificarea configurației TLS, astfel încât clientul de ieșire să fie recreat cu noile setări.
Exemplele folosesc aceste valori substituibile:
DEVICE_IP="192.168.1.80"
ADMIN_USER="admin"
ADMIN_PASSWORD="ExamplePassword1"
Înlocuiește-le cu adresa reală a dispozitivului și credențialele administratorului.
Verifică modul TLS curent
API:
GET /api/tls/ca/status
Exemplu:
curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
"http://$DEVICE_IP/api/tls/ca/status"
Exemplu de răspuns:
{
"successful": 1,
"mode": "builtin",
"customCaValid": 0,
"customCaLength": 0,
"customCaSha256": "",
"restartRequiredAfterChange": 1
}
Răspunsul raportează modul selectat și, dacă există, lungimea și rezumatul SHA-256 al CA personalizate stocate.
Selectează verificarea builtin
API:
POST /api/tls/ca/select
Exemplu:
curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
-X POST "http://$DEVICE_IP/api/tls/ca/select" \
-H "Content-Type: application/json" \
-d '{"mode":"builtin"}'
Repornește dispozitivul după un răspuns reușit.
Selectează none pentru diagnosticare temporară
API:
POST /api/tls/ca/select
Exemplu:
curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
-X POST "http://$DEVICE_IP/api/tls/ca/select" \
-H "Content-Type: application/json" \
-d '{"mode":"none"}'
Răspunsul avertizează că verificarea certificatului serverului este dezactivată. Repornește dispozitivul după schimbarea modului și revino la builtin sau custom după diagnosticare.
Încarcă și selectează o CA personalizată
Încărcarea unei CA și selectarea custom sunt operații separate. Încărcarea nu schimbă automat modul activ.
Cerințe pentru fișierul CA personalizat
Fișierul încărcat trebuie să îndeplinească toate aceste cerințe:
- format certificat PEM;
- corp brut al cererii, nu JSON și nu
multipart/form-data; Content-Type: application/x-pem-file;- lungime între 1 și 3072 octeți, inclusiv antete PEM, sfârșituri de linie și spații;
- conține
-----BEGIN CERTIFICATE-----și-----END CERTIFICATE-----; - nu conține o cheie privată.
Limita de 3072 octeți se aplică întregului corp HTTP. Un PEM de 3072 octeți este acceptat; unul de 3073 octeți este respins.
Verifică dimensiunea fișierului înainte de încărcare:
wc -c root-ca.pem
Pasul 1: Încarcă CA
API:
POST /api/tls/ca/upload
Exemplu:
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
Exemplu de răspuns reușit:
{
"successful": 1,
"length": 1939,
"sha256": "64-character SHA-256 digest",
"message": "CA uploaded; select custom mode and restart"
}
Dispozitivul stochează CA în mai multe blocuri KV și verifică lungimea salvată și rezumatul SHA-256 înainte de a o marca activă. O scriere întreruptă nu înlocuiește CA validă anterioară.
Pasul 2: Selectează custom
curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
-X POST "http://$DEVICE_IP/api/tls/ca/select" \
-H "Content-Type: application/json" \
-d '{"mode":"custom"}'
Dispozitivul respinge cererea dacă nu este stocată o CA personalizată validă. Nu revine în tăcere la none.
Pasul 3: Repornește și verifică
Repornește dispozitivul din interfața Web locală sau folosește API-ul protejat de repornire:
curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
"http://$DEVICE_IP/api/restart?reset=false"
După reconectare, interoghează din nou starea:
curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
"http://$DEVICE_IP/api/tls/ca/status"
Confirmă că mode este custom, customCaValid este 1, iar lungimea și rezumatul SHA-256 raportate corespund certificatului încărcat.
Șterge CA personalizată
API:
POST /api/tls/ca/delete
Exemplu:
curl --user "$ADMIN_USER:$ADMIN_PASSWORD" \
-X POST "http://$DEVICE_IP/api/tls/ca/delete"
Ștergerea CA personalizate restabilește și modul builtin. Repornește dispozitivul după ștergere.
Folosește IAMMETER Swagger UI
Aceleași API-uri pot fi testate fără scrierea manuală a comenzilor curl:
IAMMETER WEM API Test - TLS CA
- Deschide WEM API Test pe un computer care poate accesa IP-ul local al dispozitivului.
- Introdu adresa dispozitivului, de exemplu
192.168.1.80, și selectează Apply. - Selectează Authorize și introdu numele de utilizator și parola administratorului.
- Deschide grupul TLS CA - Authenticated.
- Folosește
GET /api/tls/ca/statuspentru configurația curentă. - Folosește încărcarea, selectarea sau ștergerea, după nevoie.
- Repornește dispozitivul după schimbarea modului sau certificatului.
Pagina Swagger rulează în browser și trimite cereri direct de la acel computer către dispozitivul IAMMETER. Nu le intermediază prin IAMMETER Cloud, deci browserul trebuie să aibă conectivitate directă la IP-ul dispozitivului.
Depanează verificarea certificatelor
admin security required
Activează Local Admin Security înainte de a folosi API-urile TLS CA. Aceste setări nu pot fi modificate anonim.
custom CA is missing or invalid
Încarcă cu succes o CA PEM validă înainte de a selecta custom. Interoghează /api/tls/ca/status și confirmă că customCaValid este 1.
Conexiunea TLS eșuează în builtin sau custom
Verifică toate aspectele următoare:
- numele gazdei sau IP-ul configurat corespunde SAN;
- certificatul este valabil în prezent și ora dispozitivului este corectă;
- serverul trimite certificatele intermediare necesare;
- CA rădăcină selectată a emis sau acordă încredere, prin lanț, certificatului serverului;
- dispozitivul a fost repornit după schimbarea configurației TLS.
TLS funcționează în none, dar eșuează în modurile cu verificare
Aceasta indică de obicei o problemă de lanț de certificate, nume de gazdă, perioadă de valabilitate sau ceas al dispozitivului. Menținerea none ascunde eșecul autentificării, dar nu îl rezolvă. Corectează implementarea certificatului sau încarcă CA rădăcină potrivită și folosește custom.