Τοπική Ασφάλεια Διαχειριστή για Μετρητές Ενέργειας IAMMETER: Οδηγός Χρήσης
Τοπική Ασφάλεια Διαχειριστή: Οδηγός Χρήσης
Η ενότητα Τοπικής Ασφάλειας Διαχειριστή είναι διαθέσιμη στο υλικολογισμικό i.91.065.3 και σε μεταγενέστερες εκδόσεις.
Σκοπός
Η ενότητα Τοπικής Ασφάλειας Διαχειριστή προστατεύει τη διαδικτυακή διεπαφή (Web UI) της συσκευής και τα ευαίσθητα τοπικά API από μη εξουσιοδοτημένη πρόσβαση.
Αφού ενεργοποιηθεί η λειτουργία, απαιτείται όνομα χρήστη και κωδικός πρόσβασης διαχειριστή για:
- όλα τα Set APIs που διατίθενται στη σελίδα WEM API Test·
- GET APIs που επιστρέφουν ευαίσθητα δεδομένα διαμόρφωσης ή εκτελούν ευαίσθητες λειτουργίες·
- τοπικές λειτουργίες μεταφόρτωσης και αναβάθμισης υλικολογισμικού μέσω OTA.
Αυτό περιλαμβάνει λειτουργίες όπως η αλλαγή των ρυθμίσεων δικτύου ή μεταφόρτωσης, η ενημέρωση του υλικολογισμικού, η επανεκκίνηση της συσκευής, η επαναφορά των εργοστασιακών ρυθμίσεων και η τροποποίηση άλλων ευαίσθητων παραμέτρων διαμόρφωσης.
Η ενότητα παρέχει:
- διαμορφώσιμα διαπιστευτήρια διαχειριστή·
- HTTP Basic Authentication για τα προστατευμένα τοπικά API·
- αλλαγή διαπιστευτηρίων μέσω του Web UI ή μέσω API·
- διαδικασία ανάκτησης βασισμένη σε υπογραφή Ed25519, σε περίπτωση που ξεχαστεί ο κωδικός πρόσβασης του διαχειριστή.
Η λειτουργία είναι απενεργοποιημένη από προεπιλογή για συμβατότητα με παλαιότερα υλικολογισμικά. Πρέπει να ενεργοποιηθεί και να διαμορφωθεί προτού τεθεί σε ισχύ η προστατευμένη πρόσβαση.
Η τρέχουσα τοπική διαδικτυακή διεπαφή χρησιμοποιεί HTTP. Το HTTP Basic Authentication κωδικοποιεί τα διαπιστευτήρια αλλά δεν τα κρυπτογραφεί. Χρησιμοποιήστε αυτή τη λειτουργία σε ένα αξιόπιστο τοπικό δίκτυο, εκτός εάν η πρόσβαση στη συσκευή γίνεται μέσω πρόσθετου ασφαλούς μηχανισμού μεταφοράς.
Διαμόρφωση της Ασφάλειας Διαχειριστή στο Web UI
- Ανοίξτε τη διεύθυνση IP της συσκευής σε ένα πρόγραμμα περιήγησης.
- Επιλέξτε την καρτέλα Security.
- Εισαγάγετε ένα όνομα χρήστη διαχειριστή.
- Εισαγάγετε και επιβεβαιώστε τον κωδικό πρόσβασης διαχειριστή.
- Επιλέξτε Enable Admin Security.
Το όνομα χρήστη και ο κωδικός πρόσβασης πρέπει να πληρούν τους ακόλουθους κανόνες:
- μήκος: 1 έως 32 χαρακτήρες·
- μόνο ορατοί χαρακτήρες ASCII·
- δεν επιτρέπονται άνω κάτω τελεία (
`:`), διπλό εισαγωγικό (`"`) ή ανάποδη κάθετος (`\`).
Αφού ενεργοποιηθεί η Ασφάλεια Διαχειριστή, το πρόγραμμα περιήγησης εμφανίζει προτροπή ταυτοποίησης όταν γίνεται πρόσβαση σε προστατευμένη σελίδα ή API. Εισαγάγετε το διαμορφωμένο όνομα χρήστη και τον κωδικό πρόσβασης διαχειριστή.
Η καρτέλα Security μπορεί επίσης να χρησιμοποιηθεί για:
- αλλαγή του ονόματος χρήστη και του κωδικού πρόσβασης διαχειριστή·
- έλεγχο ότι η ταυτοποίηση διαχειριστή είναι ενεργοποιημένη·
- ενεργοποίηση ή απενεργοποίηση της υπηρεσίας Modbus/TCP στη θύρα 502·
- ενεργοποίηση ή απενεργοποίηση της ανακάλυψης SSDP·
- απενεργοποίηση της Ασφάλειας Διαχειριστή μετά την ταυτοποίηση με τα τρέχοντα διαπιστευτήρια.

Οι αλλαγές στην κατάσταση της υπηρεσίας Modbus/TCP ή SSDP απαιτούν επανεκκίνηση της συσκευής. Εάν αυτές οι ρυθμίσεις δεν έχουν αποθηκευτεί ποτέ από παλαιότερο υλικολογισμικό, και οι δύο υπηρεσίες είναι ενεργοποιημένες από προεπιλογή για συμβατότητα με παλαιότερες εκδόσεις.
Τα προγράμματα περιήγησης ενδέχεται να αποθηκεύουν στην κρυφή μνήμη τα διαπιστευτήρια Basic Authentication για τη διεύθυνση της συσκευής. Μετά την αλλαγή του κωδικού πρόσβασης, το πρόγραμμα περιήγησης μπορεί πρώτα να δοκιμάσει τα παλιά διαπιστευτήρια και στη συνέχεια να εμφανίσει μια νέα προτροπή ταυτοποίησης. Το κλείσιμο όλων των παραθύρων του προγράμματος περιήγησης ή η χρήση ενός παραθύρου ιδιωτικής περιήγησης μπορεί επίσης να επιβάλει μια νέα σύνδεση.
APIs που Δεν Απαιτούν Basic Authentication
Τα ακόλουθα endpoints παραμένουν διαθέσιμα χωρίς επικεφαλίδα Basic Authentication, ώστε το Web UI να μπορεί να φορτώνει βασικές πληροφορίες της συσκευής και να λειτουργεί η υπογεγραμμένη διαδικασία ανάκτησης:
| Μέθοδος | Endpoint | Σκοπός |
|---|---|---|
| GET | /api/admin/status |
Επιστρέφει εάν η Ασφάλεια Διαχειριστή είναι ενεργοποιημένη και εάν υποστηρίζεται η υπογεγραμμένη ανάκτηση. |
| GET | /api/admin/recovery_challenge |
Δημιουργεί ένα μοναδικό πακέτο ανάκτησης μιας χρήσης για τη συγκεκριμένη συσκευή. |
| GET | /api/getbrand |
Επιστρέφει τη διαμόρφωση επωνυμίας του τοπικού Web UI. |
| GET | /api/monitor |
Επιστρέφει τα τρέχοντα δεδομένα παρακολούθησης της συσκευής και του μετρητή που χρησιμοποιεί το τοπικό Web UI. |
| GET | /api/monitorjson |
Επιστρέφει την απόκριση παρακολούθησης παλαιού τύπου μέσω της διαδρομής συμβατότητας /api. |
| GET | /monitorjson |
Επιστρέφει την απόκριση παρακολούθησης παλαιού τύπου. |
| GET | /api/sntpstatus |
Επιστρέφει την τρέχουσα κατάσταση SNTP. |
| GET | /info.xml |
Επιστρέφει πληροφορίες συσκευής τύπου UPnP. |
| POST | /api/admin/recovery |
Επαληθεύει την υπογραφή ανάκτησης IAMMETER και διαγράφει τα ξεχασμένα διαπιστευτήρια διαχειριστή. |
Το POST /api/admin/enable μπορεί επίσης να κληθεί χωρίς Basic Authentication, όταν η Ασφάλεια Διαχειριστή είναι αυτή τη στιγμή απενεργοποιημένη, καθώς είναι το endpoint που χρησιμοποιείται για την αρχική ρύθμιση. Εάν η Ασφάλεια Διαχειριστή είναι ήδη ενεργοποιημένη, απαιτούνται τα τρέχοντα έγκυρα διαπιστευτήρια διαχειριστή προτού αυτό το endpoint μπορέσει να αλλάξει ή να απενεργοποιήσει τη διαμόρφωση ασφαλείας.
Τα στατικά αρχεία του Web UI και άλλοι πόροι GET εκτός του /api/ δεν είναι endpoints API και παραμένουν δημόσια αναγνώσιμα. Όλα τα άλλα τοπικά endpoints API αντιμετωπίζονται ως προστατευμένα όταν η Ασφάλεια Διαχειριστή είναι ενεργοποιημένη, συμπεριλαμβανομένων όλων των Set APIs, των ευαίσθητων GET APIs και των λειτουργιών υλικολογισμικού OTA.
Αναφορά API
GET /api/admin/status
Επιστρέφει την τρέχουσα κατάσταση Ασφάλειας Διαχειριστή. Δεν απαιτείται ταυτοποίηση.
Παράδειγμα απόκρισης:
{
"enabled": 1,
"hasPassword": 1,
"recoverySupported": 1,
"modbusTcpEnabled": 1,
"ssdpEnabled": 1
}
Πεδία:
enabled:1όταν η Ασφάλεια Διαχειριστή είναι ενεργοποιημένη· διαφορετικά0.hasPassword:1όταν έχουν διαμορφωθεί διαπιστευτήρια διαχειριστή.recoverySupported:1όταν το υλικολογισμικό υποστηρίζει υπογεγραμμένη ανάκτηση διαχειριστή.modbusTcpEnabled:1όταν η υπηρεσία Modbus/TCP στη θύρα 502 είναι ενεργοποιημένη.ssdpEnabled:1όταν η ανακάλυψη SSDP είναι ενεργοποιημένη.
POST /api/admin/enable
Ενεργοποιεί ή απενεργοποιεί την Ασφάλεια Διαχειριστή.
Ενεργοποίηση της Ασφάλειας Διαχειριστή:
POST /api/admin/enable
Content-Type: application/json
{
"enable": 1,
"username": "admin",
"password": "ExamplePassword"
}
Παράδειγμα με curl:
curl -X POST "http://<device-ip>/api/admin/enable" \
-H "Content-Type: application/json" \
-d '{"enable":1,"username":"admin","password":"ExamplePassword"}'
Απενεργοποίηση της Ασφάλειας Διαχειριστή:
POST /api/admin/enable
Authorization: Basic <base6...ype: application/json
{
"enable": 0
}
Εάν η Ασφάλεια Διαχειριστή είναι ήδη ενεργοποιημένη, απαιτούνται τα τρέχοντα έγκυρα διαπιστευτήρια Basic Authentication για την κλήση αυτού του API.
Παράδειγμα:
curl -X POST "http://<device-ip>/api/admin/enable" \
-u admin:ExamplePassword \
-H "Content-Type: application/json" \
-d '{"enable":0}'
POST /api/admin/password
Αλλάζει το όνομα χρήστη και τον κωδικό πρόσβασης διαχειριστή. Αυτό το API είναι προστατευμένο μετά την ενεργοποίηση της Ασφάλειας Διαχειριστή.
POST /api/admin/password
Authorization: Basic <curre...ype: application/json
{
"username": "newadmin",
"password": "NewExamplePassword"
}
Παράδειγμα:
curl -X POST "http://<device-ip>/api/admin/password" \
-u admin:ExamplePassword \
-H "Content-Type: application/json" \
-d '{"username":"newadmin","password":"NewExamplePassword"}'
Μετά την επιτυχή εκτέλεση του αιτήματος, χρησιμοποιήστε τα νέα διαπιστευτήρια για τα επόμενα προστατευμένα αιτήματα.
GET /api/admin/check
Ελέγχει εάν τα παρεχόμενα διαπιστευτήρια Basic Authentication είναι έγκυρα.
curl -u admin:ExamplePassword \
"http://<device-ip>/api/admin/check"
Επιτυχής απόκριση:
{
"successful": 1
}
Τα ελλιπή ή μη έγκυρα διαπιστευτήρια οδηγούν σε HTTP 401 Unauthorized.
GET /api/admin/recovery_challenge
Δημιουργεί ένα μοναδικό πακέτο ανάκτησης μιας χρήσης για τη συγκεκριμένη συσκευή. Δεν απαιτείται ταυτοποίηση, επειδή αυτό το endpoint δεν επαναφέρει από μόνο του τα διαπιστευτήρια.
Παράδειγμα απόκρισης:
{
"successful": 1,
"alg": "ed25519",
"payload": "reset_admin|DEVICE_SN|DEVICE_MAC|ONE_TIME_NONCE"
}
Το επιστρεφόμενο payload πρέπει να αποσταλεί στην IAMMETER όταν απαιτείται ανάκτηση διαχειριστή.
Η αίτηση για νέο challenge ακυρώνει το προηγούμενο challenge. Ένα challenge ακυρώνεται επίσης μετά από επιτυχή ανάκτηση ή επανεκκίνηση της συσκευής.
POST /api/admin/recovery
Υποβάλλει το πακέτο ανάκτησης και την υπογραφή Ed25519 που παρέχεται από την IAMMETER.
POST /api/admin/recovery
Content-Type: application/json
{
"payload": "reset_admin|DEVICE_SN|DEVICE_MAC|ONE_TIME_NONCE",
"signature": "128-hex-character-ed25519-signature"
}
Παράδειγμα:
curl -X POST "http://<device-ip>/api/admin/recovery" \
-H "Content-Type: application/json" \
-d '{"payload":"reset_admin|DEVICE_SN|DEVICE_MAC|ONE_TIME_NONCE","signature":"<signature-from-IAMMETER>"}'
Εάν η επαλήθευση της υπογραφής είναι επιτυχής, η συσκευή διαγράφει τα τοπικά διαπιστευτήρια διαχειριστή και απενεργοποιεί την Ασφάλεια Διαχειριστή. Στη συνέχεια μπορεί να διαμορφωθεί ένα νέο όνομα χρήστη και κωδικός πρόσβασης διαχειριστή.
Εάν η συσκευή δεν διαθέτει αρκετή ελεύθερη μνήμη για την εκτέλεση της επαλήθευσης υπογραφής, το API επιστρέφει μια απόκριση παρόμοια με:
{
"successful": 0,
"message": "low memory, please change to standalone mode",
"freeMemory": 18000,
"minFreeRequired": 28000
}
Σε αυτή την περίπτωση, μειώστε τη χρήση μνήμης και ζητήστε ένα νέο challenge ανάκτησης προτού επιχειρήσετε ξανά. Εάν ο κωδικός πρόσβασης δεν είναι διαθέσιμος και η λειτουργία λειτουργίας δεν μπορεί να αλλάξει, επανεκκινήστε τη συσκευή και εκτελέστε την ανάκτηση προτού μια σύνδεση MQTTS ή HTTPS καταναλώσει επιπλέον μνήμη.
Πώς Λειτουργεί η Ανάκτηση Κωδικού Πρόσβασης
Ο σχεδιασμός της ανάκτησης αποφεύγει την προσθήκη μιας εντολής επαναφοράς εργοστασιακών ρυθμίσεων χωρίς ταυτοποίηση, που θα μπορούσε να παρακάμψει την προστασία του διαχειριστή.
Η διαδικασία χρησιμοποιεί ένα ζεύγος δημόσιου/ιδιωτικού κλειδιού Ed25519:
- το υλικολογισμικό της συσκευής περιέχει μόνο το δημόσιο κλειδί ανάκτησης της IAMMETER·
- το αντίστοιχο ιδιωτικό κλειδί διατηρείται από την IAMMETER και δεν αποθηκεύεται στη συσκευή·
- η συσκευή δημιουργεί ένα πακέτο που περιέχει τη ζητούμενη λειτουργία, το SN της συσκευής, το MAC της συσκευής και ένα nonce μιας χρήσης·
- η IAMMETER υπογράφει αυτό ακριβώς το πακέτο με το ιδιωτικό κλειδί ανάκτησης·
- η συσκευή επαληθεύει την υπογραφή με το ενσωματωμένο δημόσιο κλειδί·
- μόνο μια έγκυρη υπογραφή για την τρέχουσα συσκευή και το τρέχον nonce μπορεί να διαγράψει τη διαμόρφωση διαχειριστή.
Το nonce αποθηκεύεται μόνο στη RAM. Καθίσταται άκυρο όταν η συσκευή επανεκκινείται, όταν ζητηθεί άλλο challenge ή μετά από μία επιτυχή ανάκτηση. Επομένως, ένα παλιό πακέτο και μια παλιά υπογραφή δεν μπορούν να επαναχρησιμοποιηθούν για μια μεταγενέστερη συνεδρία ανάκτησης.
Σενάρια Χρήσης
Σενάριο 1: Ορισμός Ονόματος Χρήστη και Κωδικού Πρόσβασης Διαχειριστή
Η απλούστερη μέθοδος είναι το Web UI:
- Ανοίξτε το
http://<device-ip>/. - Ανοίξτε την καρτέλα Security.
- Εισαγάγετε το νέο όνομα χρήστη και τον κωδικό πρόσβασης διαχειριστή.
- Επιβεβαιώστε τον κωδικό πρόσβασης.
- Ενεργοποιήστε την Ασφάλεια Διαχειριστή.
Η ίδια λειτουργία μπορεί να εκτελεστεί μέσω του POST /api/admin/enable:
curl -X POST "http://<device-ip>/api/admin/enable" \
-H "Content-Type: application/json" \
-d '{"enable":1,"username":"admin","password":"ExamplePassword"}'
Επαληθεύστε το αποτέλεσμα:
curl "http://<device-ip>/api/admin/status"
Σενάριο 2: Πρόσβαση σε Προστατευμένα APIs με Basic Authentication
Για κάθε επόμενο προστατευμένο αίτημα, στείλτε το όνομα χρήστη και τον κωδικό πρόσβασης διαχειριστή στην επικεφαλίδα HTTP Basic Authentication.
Η τιμή της επικεφαλίδας διαμορφώνεται ως εξής:
Authorization: Basic Base64...nFor example, the credentials `admin:ExamplePassword` are combined first and then Base64 encoded. Most HTTP clients perform this automatically.
Χρησιμοποιώντας το curl:
curl -u admin:ExamplePassword \
"http://<device-ip>/api/getadv"
Χρησιμοποιώντας ρητή επικεφαλίδα:
TOKEN=$(printf '%s' 'admin:ExamplePassword' | base64)
curl "http://<device-ip>/api/getadv" \
-H "Authorization: Basic ***"
Για ένα αίτημα POST με JSON:
curl -X POST "http://<device-ip>/api/setadv" \
-u admin:ExamplePassword \
-H "Content-Type: application/json" \
-d '<setadv-json-body>'
Το πρόγραμμα περιήγησης διαχειρίζεται αυτή την επικεφαλίδα αυτόματα αφού ο διαχειριστής εισαγάγει τα διαπιστευτήρια στην προτροπή Basic Authentication.
Το τρέχον Web UI μεταφορτώνει το υλικολογισμικό στο
POST /api/ota_successful.html. Το παλαιού τύπου
POST /ota_successful.html endpoint παραμένει διαθέσιμο για παλαιότερες εκδόσεις
του Web UI και εξωτερικά εργαλεία. Και τα δύο endpoints απαιτούν Basic Authentication
όταν η Ασφάλεια Διαχειριστή είναι ενεργοποιημένη.
Οι καρτέλες του Web UI συμπεριφέρονται ως εξής όταν κλείσει η προτροπή ταυτοποίησης:
- Οι καρτέλες Settings και Wi-Fi δεν μπορούν να φορτώσουν τα προστατευμένα API διαμόρφωσης και εμφανίζουν ένα μήνυμα ταυτοποίησης διαχειριστή.
- Η καρτέλα System μπορεί ακόμα να εμφανίζει SN, MAC και έκδοση υλικολογισμικού,
επειδή αυτές οι τιμές ελήφθησαν από το δημόσιο endpoint
/api/monitor. Η μεταφόρτωση OTA παραμένει προστατευμένη. - Η καρτέλα Security μπορεί ακόμα να εμφανίζει βασική κατάσταση, επειδή το
/api/admin/statusείναι δημόσιο. Οι αλλαγές διαπιστευτηρίων και οι αλλαγές διακοπτών υπηρεσιών παραμένουν προστατευμένες.
Σενάριο 3: Ανάκτηση Πρόσβασης Μετά τη Λήθη του Κωδικού Πρόσβασης
Η συσκευή δεν διαθέτει κουμπί επαναφοράς υλικού. Για να αποφευχθεί η προσθήκη μιας λειτουργίας επαναφοράς χωρίς ταυτοποίηση που θα μπορούσε να παρακάμψει την Ασφάλεια Διαχειριστή, η συσκευή χρησιμοποιεί τον υπογεγραμμένο μηχανισμό ανάκτησης που περιγράφεται παραπάνω.
Αυτή η διαδικασία προορίζεται μόνο για περιπτώσεις όπου έχουν ξεχαστεί τόσο το όνομα χρήστη όσο και ο κωδικός πρόσβασης διαχειριστή. Φυλάξτε τα διαμορφωμένα διαπιστευτήρια σε ασφαλή τοποθεσία και αποφύγετε να βασίζεστε στη διαδικασία ανάκτησης για συνήθεις αλλαγές διαπιστευτηρίων. Εάν τα τρέχοντα διαπιστευτήρια είναι ακόμα διαθέσιμα, αλλάξτε τα απευθείας από την καρτέλα Security ή με το POST /api/admin/password.
Ζητήστε ένα νέο challenge ανάκτησης από τη συσκευή:
curl "http://<device-ip>/api/admin/recovery_challenge"Αντιγράψτε την πλήρη τιμή
payloadαπό την απόκριση. Μην επεξεργαστείτε το SN, το MAC, το nonce, τους διαχωριστές ή την κεφαλαιοποίηση.Επικοινωνήστε με την υποστήριξη της IAMMETER στη διεύθυνση
support@devicebit.comκαι υποβάλετε το πλήρες πακέτο.Αφού επιβεβαιωθεί η κυριότητα ή η εξουσιοδότηση της υπηρεσίας, η IAMMETER υπογράφει το πακέτο και επιστρέφει μια υπογραφή Ed25519.
Υποβάλετε το αρχικό πακέτο και την επιστρεφόμενη υπογραφή στη συσκευή:
curl -X POST "http://<device-ip>/api/admin/recovery" \ -H "Content-Type: application/json" \ -d '{"payload":"<original-payload>","signature":"<signature-from-IAMMETER>"}'Μετά από μια επιτυχή απόκριση, η Ασφάλεια Διαχειριστή απενεργοποιείται και τα προηγούμενα διαπιστευτήρια διαχειριστή διαγράφονται. Ανοίξτε την καρτέλα Security ή καλέστε το
POST /api/admin/enableγια να ορίσετε νέα διαπιστευτήρια.
Μην επανεκκινήσετε τη συσκευή και μην ζητήσετε άλλο challenge ενώ περιμένετε την υπογραφή. Και οι δύο ενέργειες ακυρώνουν το υποβληθέν πακέτο και η διαδικασία ανάκτησης πρέπει να ξεκινήσει ξανά με ένα νέο challenge.