Найти тему
Sprut.ai

Home Assistant: SSL/https в Hass.io

Оглавление

Для кого предназначена эта статья?

Осознание необходимости настройки 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"
}YAMLКОПИРОВАТЬ

Порт оставьте 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.pemYAMLКОПИРОВАТЬ

Почти всё готово. Осталось сделать в настройках роутера переадресацию входящего трафика по 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_letsencryptYAMLКОПИРОВАТЬ

Всё готово. Проверьте конфигурацию и перезагружайтесь. После загрузки вы сможете подключиться к 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",
}SHELLКОПИРОВАТЬ

Для 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": []
}SHELLКОПИРОВАТЬ

В конфигураторе в файле configuration.yaml для конфигуратора и node-red необходимо указать новые url: https://ваш_DDNS_адрес:3218/ и https://ваш_DDNS_адрес:1880/ соответственно. И, конечно же, требуется настроить на роутере переадресацию входящего трафика с портов 3218 и 1880 на соответствующие порты вашего устройства с Hass.io.

После сохранения настроек и перезапуска Hass.io вы получите доступ к конфигуратору и node-red по https.