ความปลอดภัย TLS¶
เหตุใด TLS จึงสำคัญสำหรับ IoT อุตสาหกรรม¶
ข้อมูลการตรวจวัดพลังงานเป็นข้อมูลที่ละเอียดอ่อน — เปิดเผยรูปแบบการดำเนินงานของสถานที่ การใช้งานพื้นที่ และการใช้อุปกรณ์ การส่งข้อมูลนี้โดยไม่เข้ารหัสผ่าน MQTT (พอร์ต 1883) จะทำให้ข้อมูลเสี่ยงต่อ:
- การดักจับข้อมูลบนเครือข่าย Wi-Fi ภายใน
- การโจมตีแบบ man-in-the-middle บนเส้นทางอินเทอร์เน็ต
- การดักจับข้อมูลรับรอง (ชื่อผู้ใช้/รหัสผ่าน MQTT)
การเข้ารหัส TLS (MQTT ผ่านพอร์ต 8883) ปกป้องข้อมูลระหว่างการส่งและยืนยันตัวตนของ broker
โหมด TLS¶
| โหมด | ระดับความปลอดภัย | กรณีใช้งาน |
|---|---|---|
| Fingerprint validation | ปานกลาง | บ้าน/สำนักงานขนาดเล็ก — ตรวจสอบ fingerprint ของใบรับรอง broker |
| CA certificate validation | สูง | องค์กร/AWS IoT/Azure IoT Hub — ตรวจสอบห่วงโซ่ใบรับรองแบบเต็ม |
ข้อเปรียบเทียบ¶
| ประเด็น | Fingerprint | CA Certificate |
|---|---|---|
| ความซับซ้อนในการตั้งค่า | ง่าย | ปานกลาง |
| การต่ออายุใบรับรอง broker | ต้องอัปเดต fingerprint | อัตโนมัติ |
| การใช้หน่วยความจำ | ต่ำ | สูงกว่า (~20KB) |
| Man-in-the-middle | ปกป้อง (หาก fingerprint ตรงกัน) | ปกป้องอย่างสมบูรณ์ |
| รองรับ ESP32-C3 | ใช่ | ใช่ |
การรับใบรับรอง TLS¶
วิธีที่ 1: ดึง Fingerprint จาก Broker¶
openssl s_client -connect broker.example.com:8883 < /dev/null 2>/dev/null | openssl x509 -fingerprint -sha256 -noout
ผลลัพธ์: sha256 Fingerprint=AA:BB:CC:DD:...
วิธีที่ 2: ดึงจากเบราว์เซอร์¶
- เปิด
https://broker.example.com:8883ในเบราว์เซอร์ - คลิกไอคอนแม่กุญแจ → Certificate → Details
- คัดลอก SHA-256 fingerprint
วิธีที่ 3: Let's Encrypt (แนะนำ)¶
ใช้ broker ที่มีใบรับรอง Let's Encrypt เพื่อการต่ออายุอัตโนมัติ
การตั้งค่า TLS Fingerprint¶
ขั้นตอนที่ 1: ตั้งค่า MQTT Port เป็น 8883¶
ผ่าน web UI → Configuration → Configure MQTT → Port: 8883
ขั้นตอนที่ 2: ตั้งค่า TLS Fingerprint¶
ผ่าน Tasmota console:
MqttFingerprint1 AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99
ขั้นตอนที่ 3: โหมด Auto-Learn (ทางเลือก)¶
หากคุณไม่มี fingerprint ในมือ ให้เปิดใช้งาน auto-learn:
อุปกรณ์จะเรียนรู้ fingerprint ของ broker จากการเชื่อมต่อ TLS ครั้งแรกที่สำเร็จ ตรวจสอบ fingerprint ที่เรียนรู้ว่าตรงกับ broker ของคุณก่อนที่จะเชื่อถือ
ขั้นตอนที่ 4: ตรวจสอบการเชื่อมต่อ TLS¶
ตรวจสอบบันทึกคอนโซลสำหรับ:
ทดสอบการเชื่อมต่อพอร์ต:
การตั้งค่า CA Certificate Validation¶
สำหรับการใช้งานในองค์กรที่ใช้ AWS IoT, Azure IoT Hub หรือ CA ส่วนตัว:
Compile flag: #define USE_MQTT_TLS_CA_CERT
ซึ่งจะจัดเก็บห่วงโซ่ใบรับรอง CA แบบเต็มในเฟิร์มแวร์ ติดต่อ RACKSYNC สำหรับเฟิร์มแวร์เฉพาะที่มี CA certificate ของคุณ
การแก้ไขปัญหา TLS¶
Fingerprint ไม่ตรงกันหลังจากต่ออายุใบรับรอง¶
หากใบรับรองของ broker ได้รับการต่ออายุ (เช่น Let's Encrypt ทุก 90 วัน):
- ดึง fingerprint ใหม่
- อัปเดตผ่านคอนโซล:
MqttFingerprint1 <new-fingerprint> - รีสตาร์ท MQTT:
Restart 1
การป้องกัน: ใช้ CA certificate validation แทน fingerprint
ข้อผิดพลาดด้านหน่วยความจำบน ESP32-C3¶
TLS ต้องการ RAM เพิ่มเติม หากเกิดข้อผิดพลาดด้านหน่วยความจำ:
- ลด
TelePeriod(ส่งบ่อยน้อยลง = ใช้หน่วยความจำน้อยลง) - ปิดใช้งานฟีเจอร์ Tasmota ที่ไม่ได้ใช้
- พิจารณาใช้โหมด fingerprint แทน CA validation
พอร์ตถูกบล็อก¶
ตรวจสอบว่าพอร์ต 8883 เปิดอยู่:
ใบรับรองหมดอายุ¶
ตรวจสอบวันหมดอายุของใบรับรอง:
openssl s_client -connect broker.example.com:8883 < /dev/null 2>/dev/null | openssl x509 -noout -dates
แนวปฏิบัติที่ดีด้านความปลอดภัยของอุปกรณ์¶
| แนวปฏิบัติ | วิธีการ |
|---|---|
| เปลี่ยนข้อมูลรับรอง MQTT เริ่มต้น | ตั้งค่าชื่อผู้ใช้/รหัสผ่านที่ไม่ซ้ำ |
| เปลี่ยนรหัสผ่านมิเตอร์ (1000) | เมนูตั้งค่า → รหัสผ่าน |
| ปิด open AP หลังตั้งค่า | AP mode ทำงานเฉพาะการบูตครั้งแรกหรือรีเซ็ตโรงงาน |
| เปิดใช้งานรหัสผ่าน web UI | Web UI → Configuration → Configure Web Admin |
| ใช้ HTTPS สำหรับ OTA | ใช้ HTTPS URL เท่านั้นสำหรับอัปเดตเฟิร์มแวร์ |
| อัปเดตเฟิร์มแวร์อยู่เสมอ | ตรวจสอบอัปเดตเฟิร์มแวร์ RACKSYNC เป็นประจำ |
ข้อแนะนำด้านความปลอดภัยเครือข่าย¶
| ข้อแนะนำ | รายละเอียด |
|---|---|
| IoT VLAN | วางอุปกรณ์ตรวจวัดพลังงานบน VLAN แยกต่างหาก |
| กฎไฟร์วอลล์ | อนุญาตเฉพาะขาออกพอร์ต 8883 ไปยัง MQTT broker |
| ความปลอดภัย RS485 ทางกายภาพ | จำกัดการเข้าถึงทางกายภาพมิเตอร์และ RS485 bus |
| ความปลอดภัย Wi-Fi | ใช้ WPA3 หรือ WPA2-Enterprise |