Оглавление
Cтатья 1 (установка)
Cтатья 2 (базовая настройка)
Cтатья 3 (добавляем устройства)
Cтатья 4 (интеграция с HomeKit)
Статья 5 (автоматизации)Статья 6 (GUI)Статья 7 (Z-Wave)Статья 8 (MQTT)Статья 9 (HTTPS, SSL)
Предисловие
Сейчас, когда наш умный дом достаточно разросся, пора задуматься о его безопасности и добавить шифрования нашим страничкам. Это особенно важно, если ваш Home Assistant (Далее HA) смотрит наружу вашей локальной сети. Так же данное действие позволит в будущем интегрировать HA как минимум в Google Home, используя API гугла, а не облако самого HA. Давайте разберемся более подробно.
Что необходимо для этого?
Во первых ваш HA должен быть в домене второго или третьего уровня, то есть иметь вид my-homeassistant.com или my-homeassistant.domain.com. А так же нам необходимо будет каким то образом получить подписаний сертификат, мы будем для этого использовать пакет certbot.
Что там с доменом?
Самый простой способ - воспользоваться ddns сервисом. Это будет возможно, если ваш провайдер использует статический и динамический IP адрес. Узнать данную информацию можно, позвонив вашему провайдеру. Вообще сервисов, предоставляющих услуги ddns великое множество, вы можете выбрать тот, который вас устроит:
Регистрируемся на выбранном сервисе, выбираем себе доменное имя, настраиваем сервис ddns на роутере и через пару минут пытаемся перейти по выбранному адресу в браузере. Если при переходе у вас открылась страничка настроек вашего роутера или веб морда HA (Зависит от ваших настроек), значит все настроено верно.
Let's encrypt!
Теперь нам необходимо поставить пакет для запроса и получения ssl сертификата. Подключаемся по ssh к малине, и вводим следующую команду:
sudo apt-get install certbot
при этом система предложит установить еще несколько пакетов, соглашаемся и ждем окончания процесса.
Получаем сертификат
Мы будем делать это используя временно поднятый веб сервер, который создает сам certbot. Для этого необходимо в настройках вашего роутера пробросить порт 80 извне сети на порт 80 вашей малинки. На кастомной прошивке у роутера Xiaomi это выглядит так:
Далее в ssh подключении на малине выполняем следующую команду:
sudo certbot certonly --standalone --email your_email@gmail.com -d your.domain.org
Не забудьте, что
- your_email@gmail.com - вместо этого необходимо написать свой действующий email
- your.domain.org - а тут должен быть написан ваш домен, который вы зарегистрировали у ddns сервиса
Если все сделано правильно, вывод команды будет примерно такой:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for your.domain.org Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations<span class="cm-variable-2"></span><span class="cm-variable-2"></span><span class="cm-variable-2"></span>! Your certificate and chain have been saved at: /etc/letsencrypt/live/your.domain.org/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your.domain.org/privkey.pem Your cert will expire on 2019-02-19. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If<span class="cm-variable-2"></span><span class="cm-variable-2"></span><span class="cm-variable-2"></span> you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Настраиваем Home Assistant
Теперь нам необходимо копировать полученные сертификаты в папку настроек HA. Делаем следующее:
cd /home/homeassistant/.homeassistant/ sudo cp /etc/letsencrypt/live/my.domain.org/fullchain.pem fullchain.pem sudo cp /etc/letsencrypt/live/my.domain.org/privkey.pem privkey.pem sudo chown -R homeassistant:homeassistant /home/homeassistant/.homeassistant/
Не забывайте менять my.domain.org на ваш домен. После открываем файл configuration.yaml вашего HA удобным для вас способом и в разделе http: прописываем следующее:
http: ssl_certificate: /home/homeassistant/.homeassistant/fullchain.pem ssl_key: /home/homeassistant/.homeassistant/privkey.pem
если у вас в этой секции прописаны какие-то настройки - внесите новые после существующих. Пример можно посмотреть в моем Github. Проверяем файл с настройками на правильность и сохраняем. Далее в настройках роутера необходимо добавить переадресацию для еще одного порта. В моем случае это выглядит так:
Теперь наконец можем перезагрузить наш сервис HA и попробовать перейти на его вебморду, используя свеженастроеный https используя адрес вида https://my.domain.org проверив тем самым, что все настроено правильно. Не забудьте поправить ссылку в приложении для iOS, если вы его используете.
P.S. Не забывайте, что сертификаты выдаются сроком на три месяца, и спустя этот срок, необходимо будет повторить действия из раздела "Получаем сертификат". На этом все!
Бро, а как на счет автоматизировать получение сертификата? А именно оставить 80ый порт и сделать скриптик, который будет кроном раз в три месяца запускаться и потом менять сертификаты в папке ХА?
для тех кто в будущем задаётся тем же вопросом:
certbot теперь по дефолту имеет установку крон-задач
Вот тут можно посмотреть актуальную инструкцию установки:
https://certbot.eff.org/lets-encrypt/debianbuster-nginx">https://certbot.eff.org/lets-e...
Tip: Для raspbian buster надо выбрать debian 10
правда в инструкции предлагается копировать ключи
я пробовал сделать вместо этого симлинки, но homeassistant не захотел их читать (((
так что придется таки добавить дополнительный крон скедул, который будет копировать ключи
например каждый день в 4 ночи:
sudo crontab -e
```
0 4 * * * cd /etc/letsencrypt/live/ВАШ_ДОМЕН/; cp fullchain.pem privkey.pem /usr/share/hassio/homeassistant/.ssl/
```
где ВАШ_ДОМЕН надо заменить
См так же объяснение cron-магии: https://crontab.guru/#0_4_*_*_*
После этих настроек попасть на вебморду по локальному адресу не получится?
получится конечно
Можно ли таким образом получить сертификат на доменное имя четвертого уровня? Объясняю ситуацию. Я использую сервис кинетика для получения доступа к домашнему роутеру по доменному адресу. По типу myrouter.keenetic.ru. Далее в роутере настроил доменное имя по типу mydom.myrouter.keenetic.ru. Можно ли аналогичной инструкцией получить ссл сертификат на доменное имя умного дома?
У keenetic есть статья как получить https://help.keenetic.com/hc/ru/articles/360002171260">сертификат на доменное имя 4-го уровня. Вот только, что делать дальше пока так и не понял. HA как не открывался по
https://mydom.myrouter.keenetic.ru так и не открывается. Может кто подскажет?
Не решилась проблема? на роутере получен сертификат для д.и. 4го уровня, при переходе по ссылке типа
https://mydom.myrouter.keenetic.ru">https://mydom.myrouter.keeneti... я попадаю на страницу авторизации ХА, но после логина я вижу
Unable to connect to Home Assistant.
Нет, не получилось решить. Те-же симптомы. На форуме
ХА, говорят, что проблема в настройках роутера, к которым нет доступа.
Проверено, работает на микротике так же 4ого уровня домен
Огонь!
Подскажите, есть возможность реализовать по вашей инструкции если роутер xiaomi на родной прошивке не дает пробросить 80 порт?
Добрый вечер! Подскажите, пта:
HA на docker Synology. Synology через https.
Подскажите, пта, по настройке https:
1. Пробросил порт 8123 на роутере
2. На Synology сделал обратный прокси
3. Файл конфигурации:
homeassistant:
auth_providers:
- type: homeassistant
- type: legacy_api_password
api_password: secret! my_api_password
…
http:
ssl_certificate: /config/chain.pem
ssl_key: /config/privkey.pem
base_url: https://xxx.xxx.com:8123/">https://XXX.XXX.com:8123/
Спасибо
Подскажите, нынче статья актуальна? Захожу по ssh на малину, ввожу sudo apt-get install certbot
в ответ получаю
sudo: apt-get: command not found
Какой дистрибутив? Что за железка?
можно выполнить uname -a (с пробелом)
Здравствуйте! При копировании полученных сертификатов в папку настроек HA получаю:
-bash: cd: /home/homeassistant/.homeassistant/: Нет такого файла или каталога.
Подскажите, пожалуйста, новичку в HA, что не так.
если у кого-то что-то подобное, то возможно поможет поменять путь на /usr/share/hassio/homeassistant/
либо сделайте
find / -name homeassistant -type d 2>/dev/null
чтобы найти путь если он у вас совсем другой
А директории .homeassistant внутри нет и не должно быть, в статье какая-то ошибка
Создайте сами. Только я бы назвал её иначе: .ssl
Итого:
mkdir /home/homeassistant/.ssl
или
mkdir /usr/share/hassio/homeassistant/.ssl
смотря где лежит HA
И на последнем шагу нужно будет уже этот новый путь прописать
Так же, если конфиг добавлен в гит (удобно чтобы сохранять и делиться конфигами), обязательно надо дописать .ssl в .gitignore, иначе при следующем коммите ключи попадут в публичный репозиторий
Здравствуйте, подскажите что я делаю не так?
запускаю:
sudo certbot certonly --standalone --email ХХХХХХ@gmail.com -d ХХХХХХ.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for XXXXXXXXX.com
Waiting for verification...
Challenge failed for domain ХХХХХХХ.com
http-01 challenge for ХХХХХХХ.com
Cleaning up challenges
Some challenges have failed.
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: ХХХХХХХХ.com
Type: dns
Detail: DNS problem: query timed out looking up A for
ХХХХХХХХХ.com
И вот не может пройти верификация как я понимаю?
к примеру если в браузере ввожу
ХХХХХХХХХ.com:80 - то попадаю в свой homeassistant
подскажите пожалуйста. если модем пишет что порт 80 занят маршрутизатором и перекидывает на порт 8080 , как это победить ? модем eltex ростелеком. сильно не пинайте , я только учусь ))