Xin lỗi, trình duyệt của bạn không hỗ trợ JavaScript!
Đăng nhập

Cách cấu hình xác minh chứng chỉ MQTTS và HTTPS trên công tơ IAMMETER

Công tơ IAMMETER dùng firmware i.91.065.9 trở lên có thể xác minh chứng chỉ máy chủ khi tải dữ liệu qua MQTTS hoặc HTTPS. Điều này bổ sung kiểm tra chuỗi chứng chỉ và tên máy chủ cho kết nối đi ra an toàn.

Bài viết tập trung vào cấu hình tin cậy TLS, không cấu hình topic MQTT, payload JSON hay Home Assistant discovery. Để xem quy trình xuất bản MQTT, đọc Công tơ MQTT: xuất bản dữ liệu IAMMETER tới MQTT Broker của bạn.

Trong trang này

Chọn chế độ xác minh chứng chỉ

Máy khách MQTTS và HTTPS của IAMMETER hỗ trợ ba chế độ xác minh chứng chỉ máy chủ:

Chế độ Chuỗi chứng chỉ Tên máy chủ Mục đích
builtin Xác minh bằng Root CA nhúng trong firmware Xác minh Khuyến nghị cho dịch vụ công khai dùng chuỗi được hỗ trợ
custom Xác minh bằng PEM Root CA do người dùng cung cấp Xác minh PKI riêng, triển khai tự ký hoặc Root CA công khai chưa tích hợp
none Không xác minh Không xác minh Chỉ kiểm tra tương thích hoặc chẩn đoán tạm thời

Các cài đặt này áp dụng khi thiết bị IAMMETER làm máy khách TLS và tải dữ liệu lên MQTTS broker hoặc máy chủ HTTPS. Chúng không bật HTTPS cho máy chủ Web cục bộ của thiết bị.

builtin

builtin là chế độ mặc định. Chế độ này được dùng khi chưa lưu cài đặt xác minh TLS và được khôi phục sau khi xóa cấu hình TLS CA hoặc đặt lại thiết bị về mặc định nhà máy.

Firmware chứa các Root CA sau:

  • DigiCert Global Root G2
  • ISRG Root X1

Thiết bị xác minh cả chuỗi chứng chỉ lẫn tên máy chủ. MQTTS broker hoặc máy chủ HTTPS phải trình chứng chỉ có chuỗi dẫn đến một trong các root này, và Subject Alternative Name (SAN) phải khớp địa chỉ máy chủ đã cấu hình.

Nếu địa chỉ tải lên dùng IP, SAN của chứng chỉ phải chứa chính xác IP đó. Tên DNS không khớp địa chỉ IP dù cả hai cùng trỏ đến một máy chủ.

custom

custom kiểm tra chuỗi và tên máy chủ giống builtin, nhưng tin cậy chứng chỉ PEM CA do quản trị viên tải lên. Dùng khi:

  • chứng chỉ máy chủ được cấp bởi CA riêng;
  • triển khai dùng chứng chỉ máy chủ tự ký; hoặc
  • Root CA công khai cần thiết chưa có trong firmware.

Với PKI riêng, hãy tải chứng chỉ Root CA của nó. Máy chủ TLS vẫn phải gửi các chứng chỉ trung gian cần thiết trong quá trình bắt tay. Với chứng chỉ máy chủ tự ký, có thể tải chính chứng chỉ đó làm điểm neo tin cậy, nhưng SAN vẫn phải khớp tên máy chủ hoặc IP đã cấu hình.

none

none vẫn thiết lập kết nối TLS mã hóa nhưng không xác minh chuỗi chứng chỉ hoặc tên máy chủ. Điều này tương tự hành vi TLS cũ không xác thực máy chủ.

Chế độ này dễ bị tấn công xen giữa. Chỉ dùng tạm thời để kiểm tra tương thích hoặc chẩn đoán. Trong môi trường vận hành, ưu tiên builtin hoặc custom.

Yêu cầu và giới hạn quan trọng

API cấu hình TLS CA yêu cầu bật Local Admin Security. Mỗi yêu cầu phải kèm tên đăng nhập và mật khẩu quản trị đã cấu hình qua HTTP Basic Authentication.

Máy tính chạy curl hoặc Swagger UI phải truy cập được IP cục bộ của thiết bị. Máy khách MQTTS và HTTPS dùng chung một chế độ xác minh và một CA tùy chỉnh, nên thay đổi áp dụng cho chế độ tải lên an toàn mà thiết bị sử dụng.

Khởi động lại thiết bị sau khi đổi cấu hình TLS để máy khách đi ra được tạo lại với cài đặt mới.

Các ví dụ dùng giá trị thay thế sau:

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

Thay bằng địa chỉ thiết bị thực tế và thông tin đăng nhập quản trị.

Kiểm tra chế độ TLS hiện tại

API:

GET /api/tls/ca/status

Ví dụ:

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

Ví dụ phản hồi:

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

Phản hồi cho biết chế độ đã chọn và, nếu có, độ dài cùng giá trị băm SHA-256 của CA tùy chỉnh được lưu.

Chọn xác minh builtin

API:

POST /api/tls/ca/select

Ví dụ:

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

Khởi động lại thiết bị sau phản hồi thành công.

Chọn none để chẩn đoán tạm thời

API:

POST /api/tls/ca/select

Ví dụ:

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

Phản hồi cảnh báo xác minh chứng chỉ máy chủ đã tắt. Khởi động lại sau khi đổi chế độ và chuyển về builtin hoặc custom sau chẩn đoán.

Tải lên và chọn CA tùy chỉnh

Tải CA và chọn custom là hai thao tác riêng. Tải CA không tự đổi chế độ đang hoạt động.

Yêu cầu tệp CA tùy chỉnh

Tệp tải lên phải đáp ứng tất cả yêu cầu sau:

  • định dạng chứng chỉ PEM;
  • nội dung yêu cầu thô, không phải JSON hoặc multipart/form-data;
  • Content-Type: application/x-pem-file;
  • độ dài từ 1 đến 3072 byte, gồm phần đầu/cuối PEM, xuống dòng và khoảng trắng;
  • chứa -----BEGIN CERTIFICATE----- và -----END CERTIFICATE-----;
  • không chứa khóa riêng.

Giới hạn 3072 byte áp dụng cho toàn bộ nội dung yêu cầu HTTP. Tệp PEM 3072 byte được chấp nhận, tệp 3073 byte bị từ chối.

Kiểm tra kích thước tệp trước khi tải:

wc -c root-ca.pem

Bước 1: Tải CA lên

API:

POST /api/tls/ca/upload

Ví dụ:

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

Ví dụ phản hồi thành công:

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

Thiết bị lưu CA trong nhiều khối KV, kiểm tra độ dài đã lưu và giá trị băm SHA-256 trước khi đánh dấu hoạt động. Ghi bị gián đoạn không thay thế CA hợp lệ trước đó.

Bước 2: Chọn custom

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

Thiết bị từ chối yêu cầu nếu chưa lưu CA tùy chỉnh hợp lệ. Nó không âm thầm chuyển về none.

Bước 3: Khởi động lại và kiểm tra

Khởi động lại từ Web UI cục bộ hoặc dùng API khởi động lại được bảo vệ:

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

Sau khi thiết bị kết nối lại, truy vấn trạng thái lần nữa:

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

Xác nhận mode là custom, customCaValid là 1, và độ dài cùng giá trị băm SHA-256 báo về khớp chứng chỉ đã tải.

Xóa CA tùy chỉnh

API:

POST /api/tls/ca/delete

Ví dụ:

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

Xóa CA tùy chỉnh cũng khôi phục chế độ builtin. Khởi động lại thiết bị sau khi xóa.

Dùng IAMMETER Swagger UI

Có thể thử cùng các API mà không phải tự viết lệnh curl:

IAMMETER WEM API Test - TLS CA

  1. Mở WEM API Test trên máy tính truy cập được IP cục bộ của thiết bị.
  2. Nhập địa chỉ thiết bị, ví dụ 192.168.1.80, và chọn Apply.
  3. Chọn Authorize, nhập tên đăng nhập và mật khẩu quản trị.
  4. Mở nhóm TLS CA - Authenticated.
  5. Dùng GET /api/tls/ca/status để xem cấu hình hiện tại.
  6. Dùng thao tác tải lên, chọn hoặc xóa theo nhu cầu.
  7. Khởi động lại sau khi đổi chế độ hoặc chứng chỉ.

Trang Swagger chạy trong trình duyệt và gửi yêu cầu trực tiếp từ máy tính đó đến thiết bị IAMMETER. Nó không chuyển tiếp qua IAMMETER Cloud, nên trình duyệt phải có kết nối mạng trực tiếp tới IP thiết bị.

Xử lý sự cố xác minh chứng chỉ

admin security required

Bật Local Admin Security trước khi dùng API TLS CA. Không thể thay đổi các cài đặt này ẩn danh.

custom CA is missing or invalid

Tải thành công PEM CA hợp lệ trước khi chọn custom. Truy vấn /api/tls/ca/status và xác nhận customCaValid là 1.

Kết nối TLS thất bại ở builtin hoặc custom

Kiểm tra tất cả các điểm sau:

  • tên máy chủ hoặc IP đã cấu hình khớp SAN của chứng chỉ;
  • chứng chỉ hiện còn hiệu lực và giờ thiết bị chính xác;
  • máy chủ gửi các chứng chỉ trung gian cần thiết;
  • Root CA được chọn đã cấp hoặc tin cậy chứng chỉ máy chủ qua chuỗi;
  • thiết bị đã khởi động lại sau khi đổi cấu hình TLS.

TLS hoạt động ở none nhưng thất bại ở chế độ xác minh

Điều này thường chỉ ra vấn đề chuỗi chứng chỉ, tên máy chủ, thời hạn hiệu lực hoặc đồng hồ thiết bị. Giữ none chỉ che lỗi xác thực, không giải quyết lỗi. Sửa triển khai chứng chỉ hoặc tải Root CA phù hợp và dùng custom.

Lên đầu