Home Assistant – Установка SSL сертификата
Чтобы обеспечить безопасный доступ к Home Assistant необходимо установить SSL сертификат, причины для этого могут быть разные, от обычного контроля системы, до интеграции Home Assistant с Яндекс Алисой.
Для доступа извне понадобиться внешний статический или динамический IP адрес и домен второго или третьего уровня. Статический IP адрес как и зарегистрированный домен гораздо предпочтительней. Для получения “белого” IP адреса необходимо обратиться к вашему провайдеру (у провайдера эта услуга может оказаться платной ). Домен можно приобрести например на сайте REG.RU или не покупая воспользоваться сервисом DDNS.
Самоподписанный сертификат не годен, для сторонних сервисов таких как Яндекс он не подойдет.
На официальном сайте Home Assistant рекомендуют:
- в качестве DDNS сервиса использовать DuckDNS
- для получения сертификата центр сертификации Let’s Encrypt.
Получение бесплатного сертификата
Let’s Encrypt позволяет получать бесплатные 90 дневные сертификаты в автоматическом режиме принимаемые в интернете. Это то, что нужно.
Если нет прямого доступа к консоли, то подключаемся по SSH и устанавливаем программное обеспечение “certbot” для получения сертификата.
sudo apt-get install certbot
Во время получения сертификата на сервере временно открывается порт 80, через который происходит проверка доступности сервера по нашему доменному имени. В связи с этим необходимо убедиться, что данный порт не занят другим сервисом, обычно web сервером. если такой сервис уже запущен, то на время получения сертификата нам необходимо его остановить. Если сервер находится во внутренней сети (за маршрутизатором), то необходимо пробросить порт 80 на маршрутизаторе на порт 8123 нашего сервера.
Для получения сертификата в терминале сервера выполняем команду:
sudo certbot certonly --standalone --email ваш@email -d ваш_домен
В соответствующие поля введите ваш электронный почтовый ящик и имя домена, по которому вы будете иметь доступ к своему серверу.
Если при создании сертификата возникла ошибка 404 это значит что Let’s Encrypt не может связаться с временным сервером который создал certbot. Для решения этой проблемы я остановил Home Assistant
sudo systemctl stop home-assistant@homeassistant
После этого я на маршрутизаторе удалил правило маршрутизации с внешнего порта 80 на внутренний порт 8123 вашего сервера с установленым Home Assistant и создал новое правило с внешнего порта 80 на внутренний порт 80 вашего сервера, так как на этом порту certbot создает временный веб сервер для проверки сертификата. Далее даем команду:
sudo certbot certonly --standalone --email ваш@email -d ваш_домен
При успешном создании сертификата в результате выполнения программы будет сообщено где лежат новые сознанные сертификаты. Для Ubuntu и других систем на основе Debian, в том числе Raspberry Pi OS и Armbian путь будет:
/etc/letsencrypt/live/здесь_ваш_домен/cert.pem
/etc/letsencrypt/live/здесь_ваш_домен/chain.pem
/etc/letsencrypt/live/здесь_ваш_домен/fullchain.pem
/etc/letsencrypt/live/здесь_ваш_домен/privkey.pem
После этого 80 порт можно закрыть и на маршрутизаторе вернуть прежние настройки. Из сгенерированных файлов берем нужные нам файлы и копируем их в папку с настройками Home Assistant.
sudo cp -f /etc/letsencrypt/live/здесь_ваш_домен/fullchain.pem /home/homeassistant/.homeassistant/fullchain.pem
sudo cp -f /etc/letsencrypt/live/здесь_ваш_домен/privkey.pem /home/homeassistant/.homeassistant/privkey.pem
Далее переходите к пункту – Окончательная настройка.
Установка сертификатов от REG.RU
При покупке доменного имени на сайте REG.RU так же можно приобрести SSL сертификаты. При этом регистратор доменного имени высылает Вам на почту сертификаты и приватный ключ которые мы установим в папку Home Assistant. Подключаемся к консоли и создаем текстовой файл.
sudo nano /home/homeassistant/.homeassistant/fullchain.pem
Заходите к себе на почту и находите письмо от REG.RU – Данные для установки ssl сертификата для домена ваш_домен.ru. В этом письме мы найдем нужные нам сертификаты в текстовом формате. Каждый сертификат начинается строкой
—–BEGIN CERTIFICATE—–
и заканчивается строкой
—–END CERTIFICATE—–.
Всего имеется три сертификата.
- Ваш сертификат
- Корневой сертификат
- Промежуточный сертификат
Копируйте первый сертификат.
Вставляем скопированый сертификат в открытый в консоли текстовой файл fullchain.pem.
Далее таким же образом копируем оставшиеся два сертификата.
Закрываем текстовой редактор “Ctrl-X”, подтверждаем сохранение “Y” и Enter.
Создаем файл с приватным ключом.
sudo nano /home/homeassistant/.homeassistant/privkey.pem
В письме с сертификатами в самом внизу скопируйте приватный ключ и вставьте в открытый в терминале файл privkey.pem
Закрываем текстовой редактор “Ctrl-X”, подтверждаем сохранение “Y” и Enter.
Окончательная настройка
На файлы fullchain.pem и privkey.key устанавливаем права доступа назначив хозяином пользователя и группу из-под которого на нашем сервере запускается сервис Home Assistant:
sudo chown homeassistant:homeassistant /home/homeassistant/.homeassistant/fullchain.pem
sudo chown homeassistant:homeassistant /home/homeassistant/.homeassistant/privkey.pem
В файл “configuration.yaml” вносим информацию о наших сертификатах:
http:
ssl_certificate: /home/homeassistant/.homeassistant/fullchain.pem
ssl_key: /home/homeassistant/.homeassistant/privkey.pem
Проверяем файл настроек средствами Home Assistant и перезапускаем.
Проверяем правильность установки SSL сертификата
Проверить SSL-сертификат сайта онлайн можно по инструкции ниже:
- Перейдите по ссылке.
- Введите имя вашего домена и нажмите Check SSL.
- При корректной установке SSL-сертификата вы увидите примерно такой результат:
В некоторых случаях результаты проверки кэшируются, и отображаются устаревшие данные. Об этом свидетельствует текст под строкой поиска. Чтобы получить актуальную информацию об установке SSL-сертификата, перейдите по ссылке clicking here и пройдите CAPTCHA-тест:
Для упрощения обновления сертификата в будущем можно создать скрипт:
#!/bin/sh
email_4_cert=”здесь_ваш@email”
domain_ha=”здесь_ваш_домен”
dir_ha_home=”/home/homeassistant”
/usr/bin/certbot certonly –standalone –email $email_4_cert -d $domain_ha
cp -f /etc/letsencrypt/live/$domain_ha/fullchain.pem $dir_ha_home/.homeassistant/fullchain.pem
chown homeassistant:homeassistant $dir_ha_home/.homeassistant/fullchain.pem
cp -f /etc/letsencrypt/live/$domain_ha/privkey.pem $dir_ha_home/.homeassistant/privkey.pem
chown homeassistant:homeassistant $dir_ha_home/.homeassistant/privkey.pem
Сохраняем скрипт на сервере, в последующем по необходимости запускаем скрипт и перезапускаем сервис Home Assistant.
Для доступа к серверу снаружи, при нахождении его за маршрутизатором, пробрасываем порт 8123 от маршрутизатора до нашего сервера. Для упрощения или при проблемах доступа внутри локальной сети по имени домена в DNS сервере маршрутизатора создаем статическую запись типа А пары: ваш_зарегистрированный_домен -> локальный_IP_адрес_сервера (не обязательно, не все маршрутизаторы поддерживают данную функцию).
Для мониторинга срока истечения сертификата добавляем интеграцию Certificate Expiry в Home Assistant. Для этого в меню идем в Настройки->Интеграции. Там жмем кнопку Добавить интеграцию и в самом низу выбираем – Срок действия сертификата.
В поле Host пишем: ваш_зарегистрированный_домен, в поле Port 8123 (для конфигурации, описанной выше).
Добавляем карточку Entities в Dashboards, вносим сенсор sensor.cert_expiry_timestamp_ваш_зарегистрированный_домен.
Добавляем автоматизацию для напоминания о замене сертификата за 5 дней в сервис уведомлений Home Assistant. В файл “automations.yaml” добавляем:
– id: ‘certificate_expiration_reminder’
alias: “Certificate expires in 5 days”
description: “Сертификат истекает через 5 дней”
trigger:
– entity_id: sensor.cert_expiry_ваш_зарегистрированный_домен
platform: numeric_state
below: ‘6’
condition: []
action:
– service: persistent_notification.create
data:
message: “Срок действия сертификата Home Assistant истекает через 5 дней”
title: “⚠ Certificate Expiration”
Теперь можно проверить доступ к нашему серверу по HTTPS по имени домена.