Для кого предназначена эта статья?
Осознание необходимости настройки SSL и доступа по https у меня появилось после прочтения статьи Home Assistant, статья 9 (https, ssl). К сожалению, описанный в ней способ настройки не подходил для меня, поскольку я установил Hass.io, который ограничен в области действий по SSH. Пришлось мне искать иной способ настройки, и этим способом стал add-on в Hass.io - Let's Encrypt. Статья обобщает путь, который пришлось проделать мне для того, чтобы иметь возможность подключиться к Hass.io по https, и может оказаться полезной для таких же новичков, как и я.
Почему Let's Encrypt, а не DuckDNS? Ведь add-on DuckDNS предоставляет DDNS и, в то же время, имеет встроенную поддержку Let's Encrypt. Дело в том, что у меня на роутере уже имеется настроенный DDNS, через который я получаю доступ к домашней сети. Для тех же, у кого DDNS еще нет, DuckDNS будет оптимальным выбором. Инструкцию по его настройке можно посмотреть здесь.
Установка и настройка Let's Encrypt
Установка Let's Encrypt в Hass.io предельно проста. На боковой панели выберите Hass.io, перейдите на вкладку Add-on Store, найдите и установите add-on Let's Encrypt. Остается его настроить. Укажите в настройках ваш email и выделенный DDNS, сохраните настройки.
{ "email": "ваш_email", "domains": ["ваш_DDNS_адрес"], "certfile": "fullchain.pem", "keyfile": "privkey.pem" }
Порт оставьте 80. Также, для запроса сертификатов от CA Let's Encrypt необходимо настроить на роутере переадресацию входящего трафика по 80 порту на 80 порт вашего устройства с Hass.io.
После настройки add-on'а можете его запустить. Он запросит со своего сервера сертификаты, запишет их в папку /ssl и закончит свою работу.
Откройте в конфигураторе файл configuration.yaml и в разделе http добавьте приведенные ниже строки (указав в base_url ваш DDNS адрес).
http: base_url: https://ваш_DDNS_адрес:8123 ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem
Почти всё готово. Осталось сделать в настройках роутера переадресацию входящего трафика по 8123 порту на 8123 порт вашего устройства с Hass.io.
И еще одно маленькое дополнение. Сертификат необходимо будет получать заново каждые 30 дней. Для того, чтобы не пришлось делать этого вручную, необходимо добавить в конфигураторе несколько строк в файл automations.yaml. Благодаря этой автоматизации Let's Encrypt будет каждую полночь проверять, не истекли ли ваши сертификаты, и, при необходимости, будет запускать add-on, загружая свежие сертификаты (на роутере должна быть настроена переадресация 80 порта).
- id: letsencrypt-renewal alias: "Let's Encrypt Renewal" trigger: - platform: time at: '00:00:00' action: - service: hassio.addon_restart data: addon: core_letsencrypt
Всё готово. Проверьте конфигурацию и перезагружайтесь. После загрузки вы сможете подключиться к Hass.io по адресу https://ваш_DDNS_адрес:8123 (https://hassio.local:8123 в локальной сети).
Вот только незадача - конфигуратор и node-red не открываются по https. Нужно это исправить, внеся изменения в настройки add-on'ов конфигуратора и node-red.
Для конфигуратора config имеет следующий вид:
{ "username": "логин", "password": "пароль", "ssl": true, "certfile": "fullchain.pem", "keyfile": "privkey.pem", "allowed_networks": [ "0.0.0.0/0" ], "banned_ips": [ "" ], "banlimit": 5, "ignore_pattern": [ "__pycache__" ], "dirsfirst": true, "enforce_basepath": false, "notify_service": "persistent_notification.create", }
Для node-red config имеет следующий вид:
{ "log_level": "error", "credential_secret": "password", "http_node": { "username": "логин", "password": "пароль" }, "http_static": { "username": "логин", "password": "пароль" }, "port": 1880, "ssl": true, "certfile": "fullchain.pem", "keyfile": "privkey.pem", "require_ssl": true, "system_packages": [], "npm_packages": [], "init_commands": [] }
В конфигураторе в файле configuration.yaml для конфигуратора и node-red необходимо указать новые url: https://ваш_DDNS_адрес:3218/ и https://ваш_DDNS_адрес:1880/ соответственно. И, конечно же, требуется настроить на роутере переадресацию входящего трафика с портов 3218 и 1880 на соответствующие порты вашего устройства с Hass.io.
После сохранения настроек и перезапуска Hass.io вы получите доступ к конфигуратору и node-red по https.