Перейти к основному контенту

Глава 7: Защита — Certbot и SSL Let's Encrypt

Современный интернет немыслим без шифрования. Наш BookStack в файле Docker Compose уже настроен на работу через защищенное соединение (параметр APP_URL=https://...). Если мы попытаемся оставить сайт на обычном HTTP, браузеры будут ругаться на небезопасное подключение, а сам BookStack не сможет правильно загружать скрипты и стили.

Для решения этой задачи мы воспользуемся утилитой Certbot от некоммерческого центра сертификации Let's Encrypt, которая автоматически выпустит, установит и будет сама продлевать бесплатный SSL/TLS-сертификат.


1. Установка Certbot и плагина для Nginx

В современных версиях Debian самым надежным и рекомендуемым разработчиками способом установки Certbot является пакетный менеджер snapd, однако для домашнего сервера классическая установка из официальных репозиториев apt остается наиболее простой и стабильной.

Установите сам Certbot и специальный модуль интеграции с веб-сервером Nginx:

sudo apt update && sudo apt install certbot python3-certbot-nginx -y

2. Запуск процесса выпуска SSL-сертификата

ВАЖНОЕ НАПОМИНАНИЕ перед запуском: Убедитесь, что вы уже выполнили настройки из предыдущих глав: порты 80 и 443 на роутере проброшены на ваш сервер (Глава 3), а DNS-запись для поддомена (например, wiki.myserver.ru) уже обновилась и ведет на ваш внешний белый IP (Глава 4).

Запустите Certbot, указав ему автоматически настроить конфигурацию Nginx для вашего конкретного поддомена:

sudo certbot --nginx -d wiki.myserver.ru

Что будет происходить в процессе (Интерактивный режим):

  1. Ввод Email: Утилита попросит вас ввести ваш действующий адрес электронной почты. На него Let's Encrypt пришлет уведомление, если с вашим сертификатом что-то случится или сломается автоматическое продление. Введите email и нажмите Enter.
  2. Условия соглашения: Попросят согласиться с условиями обслуживания (Terms of Service). Нажмите Y (Yes) и Enter.
  3. Рассылка: Спросят, хотите ли вы поделиться своим адресом с некоммерческим фондом EFF для получения новостей. Нажмите N (No) или Y на ваше усмотрение.
  4. Проверка (ACME Challenge): Certbot свяжется с серверами Let's Encrypt. Те сделают проверочный запрос на ваш домен http://wiki.myserver.ru. Наш Nginx, который мы настроили в Главе 6, поймает этот запрос и подтвердит: "Да, этот домен действительно принадлежит этому серверу".

Если всё прошло успешно, в консоли появится вожделенное сообщение:
Successfully received certificate. / Successfully deployed certificate for wiki.myserver.ru


3. Что Certbot сделал за кулисами?

Certbot — невероятно умная утилита. Она не просто скачала файлы ключей безопасности в папку /etc/letsencrypt/live/, она самостоятельно залезла в наш созданный файл /etc/nginx/sites-available/wiki.myserver.ru и автоматически переписала его:

  • Добавила новые блоки для работы на порту 443 (HTTPS).
  • Прописала пути к сгенерированным секретным SSL-ключам и сертификатам.
  • Создала автоматический, безопасный редирект (перенаправление): теперь если пользователь введет в браузере старый адрес с http://, Nginx сам мгновенно перекинет его на защищенный https://.

4. Проверка автоматического продления сертификатов

Сертификаты Let's Encrypt выдаются ровно на 90 дней. Однако ручками обновлять их каждые три месяца не придется. При установке Certbot автоматически создает в системе фоновый таймер (cron-задачу или системный таймер systemd), который дважды в день проверяет состояние сертификатов и обновляет те, до конца срока которых осталось меньше 30 дней.

Вы можете прямо сейчас протестировать, что режим симуляции автоматического продления работает без ошибок:

sudo certbot renew --dry-run

Если в конце вы увидите фразу Congratulations, all simulated renews succeeded — ваша система автоматизации защиты работает безупречно.

Итог главы: Наш конфигурационный файл полностью сформирован и защищен самым современным шифрованием. Файлы сертификатов лежат на диске сервера. Нам остался финальный, 8-й шаг — активировать этот конфиг внутри Nginx, чтобы запустить нашу базу знаний в жизнь!