Извините, ваш браузер не поддерживает JavaScript!
Войти

Настройка проверки сертификатов MQTTS и HTTPS на счётчике IAMMETER

Счётчики IAMMETER с прошивкой i.91.065.9 или новее могут проверять сертификат сервера при отправке данных по MQTTS или HTTPS. Эта функция добавляет проверку цепочки сертификатов и имени узла сервера для защищённых исходящих соединений.

Эта статья посвящена настройке доверия TLS. Она не описывает настройку топиков MQTT, данных JSON или обнаружения Home Assistant. О публикации через MQTT читайте в статье Счётчик MQTT: отправка данных IAMMETER на ваш MQTT-брокер.

На этой странице

Выбор режима проверки сертификатов

Клиенты MQTTS и HTTPS в IAMMETER поддерживают три режима проверки сертификата сервера:

Режим Цепочка сертификатов Имя узла сервера Назначение
builtin Проверяется по корневым CA, встроенным в прошивку Проверяется Рекомендуется для общедоступных сервисов с поддерживаемой цепочкой
custom Проверяется по корневому CA в формате PEM, загруженному пользователем Проверяется Частная PKI, самоподписанные сертификаты или публичные корневые CA, отсутствующие в прошивке
none Не проверяется Не проверяется Только совместимость или временная диагностика

Эти настройки применяются, когда устройство IAMMETER работает как клиент TLS и отправляет данные на брокер MQTTS или сервер HTTPS. Они не включают HTTPS на локальном веб-сервере устройства.

builtin

builtin — режим по умолчанию. Он используется, если настройка проверки TLS ещё не сохранена, и восстанавливается после удаления конфигурации TLS CA или сброса устройства к заводским настройкам.

В прошивку встроены следующие корневые CA:

  • DigiCert Global Root G2
  • ISRG Root X1

Устройство проверяет цепочку сертификатов и имя узла сервера. Брокер MQTTS или сервер HTTPS должен предоставить сертификат, цепочка которого ведёт к одному из этих корневых CA, а поле Subject Alternative Name (SAN) должно соответствовать заданному адресу сервера.

Если в качестве адреса назначения указан IP-адрес, SAN сертификата должен содержать именно этот IP-адрес. Имя DNS не соответствует IP-адресу, даже если оба указывают на один сервер.

custom

custom выполняет те же проверки цепочки и имени узла, что и builtin, но доверяет сертификату CA в формате PEM, загруженному администратором. Используйте его, если:

  • сертификат сервера выдан частным CA;
  • используется самоподписанный сертификат сервера; или
  • необходимый публичный корневой CA не встроен в прошивку.

Для частной PKI загрузите её корневой сертификат. Во время установления соединения сервер TLS по-прежнему должен передавать необходимые промежуточные сертификаты. Самоподписанный сертификат сервера можно загрузить как якорь доверия, однако его SAN всё равно должен соответствовать заданному имени узла или IP-адресу.

none

none по-прежнему устанавливает зашифрованное соединение TLS, но не проверяет цепочку сертификатов и имя узла. Это похоже на прежнее поведение TLS без аутентификации сервера.

Этот режим уязвим для атак «человек посередине» (man-in-the-middle). Используйте его только временно для совместимости или диагностики. В рабочей среде предпочтительны builtin или custom.

Требования и важные ограничения

Для API настройки TLS CA необходимо включить Local Admin Security. Каждый запрос должен передавать заданные имя пользователя и пароль администратора через HTTP Basic Authentication.

Компьютер с curl или Swagger UI должен иметь доступ к локальному IP-адресу устройства. Клиенты MQTTS и HTTPS используют общий режим проверки и один собственный CA, поэтому изменение применяется к используемому устройством режиму защищённой отправки данных.

После изменения конфигурации TLS перезапустите устройство, чтобы исходящий клиент был создан заново с новыми настройками.

В примерах используются следующие значения-заполнители:

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

Замените их фактическим адресом устройства и учётными данными администратора.

Проверка текущего режима TLS

API:

GET /api/tls/ca/status

Пример:

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

Пример ответа:

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

Ответ показывает выбранный режим, а при наличии сохранённого собственного CA — его длину и хеш SHA-256.

Выбор проверки builtin

API:

POST /api/tls/ca/select

Пример:

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

После успешного ответа перезапустите устройство.

Выбор none для временной диагностики

API:

POST /api/tls/ca/select

Пример:

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

Ответ предупреждает, что проверка сертификата сервера отключена. После смены режима перезапустите устройство, а по завершении диагностики вернитесь к builtin или custom.

Загрузка и выбор собственного CA

Загрузка CA и выбор custom — отдельные операции. Загрузка CA не переключает активный режим автоматически.

Требования к файлу собственного CA

Загружаемый файл должен соответствовать всем требованиям:

  • формат сертификата PEM;
  • необёрнутое тело запроса, не JSON и не multipart/form-data;
  • Content-Type: application/x-pem-file;
  • длина от 1 до 3072 байт, включая заголовки PEM, переводы строк и пробельные символы;
  • наличие -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----;
  • отсутствие закрытого ключа.

Ограничение в 3072 байта относится ко всему телу HTTP-запроса. PEM-файл размером 3072 байта принимается, а размером 3073 байта — отклоняется.

Проверьте размер файла перед загрузкой:

wc -c root-ca.pem

Шаг 1: загрузите CA

API:

POST /api/tls/ca/upload

Пример:

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

Пример успешного ответа:

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

Устройство сохраняет CA в нескольких блоках KV и проверяет сохранённые длину и хеш SHA-256, прежде чем отметить его как активный. Прерванная запись не заменяет предыдущий действительный CA.

Шаг 2: выберите custom

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

Устройство отклонит запрос, если действительный собственный CA не сохранён. Незаметного перехода на none не происходит.

Шаг 3: перезапустите и проверьте

Перезапустите устройство через локальный веб-интерфейс или используйте защищённый API перезапуска:

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

После восстановления соединения снова запросите состояние:

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

Убедитесь, что mode имеет значение custom, customCaValid равен 1, а длина и хеш SHA-256 соответствуют загруженному сертификату.

Удаление собственного CA

API:

POST /api/tls/ca/delete

Пример:

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

Удаление собственного CA также восстанавливает режим builtin. После удаления перезапустите устройство.

Использование Swagger UI IAMMETER

Те же API можно проверить без ручного написания команд curl:

IAMMETER WEM API Test - TLS CA

  1. Откройте страницу WEM API Test на компьютере, имеющем доступ к локальному IP-адресу устройства.
  2. Введите адрес устройства, например 192.168.1.80, и выберите Apply.
  3. Выберите Authorize и введите имя пользователя и пароль администратора.
  4. Откройте группу TLS CA - Authenticated.
  5. Используйте GET /api/tls/ca/status для просмотра текущей конфигурации.
  6. При необходимости выполните загрузку, выбор или удаление.
  7. После изменения режима или сертификата перезапустите устройство.

Страница Swagger работает в браузере и отправляет запросы непосредственно с этого компьютера на устройство IAMMETER. Она не передаёт запросы через IAMMETER Cloud, поэтому браузеру необходим прямой сетевой доступ к IP-адресу устройства.

Устранение неполадок проверки сертификатов

admin security required

Включите Local Admin Security перед использованием API TLS CA. Анонимное изменение этих настроек невозможно.

custom CA is missing or invalid

Перед выбором custom успешно загрузите действительный CA в формате PEM. Запросите /api/tls/ca/status и убедитесь, что customCaValid равен 1.

Соединение TLS не устанавливается с builtin или custom

Проверьте все следующие условия:

  • заданное имя узла или IP-адрес соответствует SAN сертификата;
  • сертификат действителен в данный момент, а часы устройства настроены правильно;
  • сервер отправляет необходимые промежуточные сертификаты;
  • выбранный корневой CA выдал сертификат сервера либо служит конечным источником доверия в его цепочке;
  • устройство было перезапущено после изменения TLS.

TLS работает с none, но не работает в режимах с проверкой

Обычно это указывает на проблему с цепочкой сертификатов, именем узла, сроком действия или часами устройства. Сохранение none скрывает сбой аутентификации, но не устраняет его. Исправьте конфигурацию сертификатов либо загрузите правильный корневой CA и используйте custom.

Наверх