Linux
April 29

Самоподписанный SSL сертификат для внутреннего использования

Шифрование данных стало неотъемлемой частью современного интернета. Практически весь трафик передается через защищенное HTTPS-соединение, а сайты без шифрования встречаются крайне редко и автоматически помечаются браузерами как небезопасные.

Несмотря на предупреждения браузеров о "непроверенных" сертификатах, само шифрование работает корректно. Использование бесплатных сертификатов Lets Encrypt для домашней сети связано со множеством сложностей и затрат:

  • Покупка домена
  • Скрытие персональных данных
  • Настройка DNS-хостинга
  • Статический IP или DDNS
  • Проброс портов
  • Регулярное обновление каждые 3 месяца

Поэтому для внутренней сети оптимальным решением являются самоподписанные сертификаты, а Lets Encrypt лучше оставить для внешних сервисов.

Как оказалось, создание SSL-сертификатов – это проще, чем кажется. Достаточно одной команды:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout homelocal.key -out homelocal.crt -subj "/CN=home.local" \
-addext "subjectAltName=DNS:home.local"

Эта команда создаст:

  • Файл ключа (homelocal.key)
  • Файл сертификата (homelocal.crt)
  • Срок действия: 10 лет
  • Уровень шифрования (rsa:4096, sha256)
По умолчанию оба файла будут созданы в том каталоге, из которого выполнялась команда.

Для удобства управления рекомендуется использовать один домен для всей домашней сети (например, home.local) и размещать сервисы на поддоменах:

  • pve.home.local
  • npm.home.local
  • adg.home.local
  • nut.home.local
  • etc

Чтобы ходить по данным именам, необходимо:

1. Развернуть 2 сервиса:

  • DNS - у меня это Adguard Home, который добавлен на роутере как дополнительный DNS.
  • Nginx - у меня это Nginx Proxy Manager, в который добавлен сертификат.

2. Добавить созданный сертификат в Доверенные корневые сертификаты на Windows или в Связку ключей на macOS

Итог: внедрение SSL-сертификатов в домашнюю сеть – простой и эффективный способ защитить данные, который не требует значительных временных и финансовых затрат.

Мне помогли:

https://andrey.dvur.me/posts/selfsigned-cert/