Защита Apache с помощью Let’s Encrypt на Debian 13, 12, 11: подробное руководство

Let’s Encrypt выдаёт бесплатные SSL/TLS-сертификаты, которые шифруют трафик между вашим Apache-сервером и посетителями. Без сертификата браузеры показывают предупреждение «Не защищено», а поисковые системы понижают рейтинг сайта. Certbot — это официальный клиент Let’s Encrypt, который автоматически получает сертификат, настраивает Apache и обновляет его. Главные сложности для новичка: перед запуском Certbot нужно убедиться, что домен смотрит на сервер, открыты порты 80 и 443, и у Apache уже есть виртуальный хост для этого домена. Также после установки важно настроить дополнительные заголовки безопасности и включить HTTP/2.

💡 В этом руководстве вы настроите HTTPS для вашего сайта на Apache с помощью Let’s Encrypt. Мы установим Certbot, получим сертификат с автоматической настройкой редиректа, HSTS и OCSP Stapling, проверим автоматическое обновление и усилим конфигурацию SSL (TLS 1.3, HTTP/2, дополнительные заголовки).

В этой статье вы узнаете:

  • Какие требования должны быть выполнены до запуска Certbot (домен, DNS, порты)
  • Как установить Certbot и плагин для Apache
  • Как получить сертификат одной командой с настройкой HTTPS-редиректа
  • Как проверить, что сертификат установлен и работает
  • Как работает автоматическое обновление сертификатов через systemd-таймер
  • Как усилить конфигурацию Apache: HTTP/2, HSTS, дополнительные заголовки безопасности
  • Как решить типичные проблемы: валидация домена, ошибки модуля, mixed content

Для кого: владельцы сайтов на Apache, администраторы серверов, а также все, кто хочет настроить бесплатный HTTPS на Debian 11, 12 или 13.

Оглавление

1. 🔧 Предварительные требования

Перед настройкой убедитесь, что выполнены следующие условия. Если что-то пропустить — Certbot выдаст ошибку.

  • Установленный и работающий Apache. Если Apache ещё не установлен, у нас есть руководство по установке Apache на Debian.
  • Зарегистрированное доменное имя, которое указывает на ваш сервер. Должна быть настроена A-запись (или AAAA для IPv6), указывающая на публичный IP-адрес вашего сервера.
  • Открытые порты 80 (HTTP) и 443 (HTTPS) в фаерволе. Let’s Encrypt использует HTTP-01 валидацию через порт 80. Если порты закрыты — сертификат не выдастся.
  • Настроенный виртуальный хост в Apache для вашего домена (файл в /etc/apache2/sites-available/ с включённым симлинком в sites-enabled). Certbot будет опираться на него.
  • Права sudo для выполнения команд.

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.

Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты.

✅ Если выводит root — всё в порядке, можете продолжать.

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.

1.1 Обновление системы

Перед установкой всегда обновляйте список пакетов.

sudo apt update && sudo apt upgrade -y

Что делает:

  • sudo — права суперпользователя
  • apt update — обновляет список доступных пакетов
  • && — выполняет следующую команду только если предыдущая успешна
  • apt upgrade -y — обновляет все установленные пакеты

Зачем: Certbot и его зависимости должны устанавливаться в актуальную систему.

1.2 Открытие портов в UFW (если используется)

Если вы используете UFW, откройте порты 80 и 443 до запуска Certbot.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Если вы подключаетесь к серверу по SSH, убедитесь, что SSH также разрешён, иначе потеряете доступ.

sudo ufw allow ssh

Проверка, что UFW активен и порты открыты:

sudo ufw status

2. 📦 Установка Certbot и плагина для Apache

Certbot — это официальный клиент Let’s Encrypt. Плагин python3-certbot-apache позволяет Certbot автоматически изменять конфигурацию Apache (добавлять SSL-директивы, настраивать редирект).

sudo apt install certbot python3-certbot-apache -y

Что делает: Устанавливает Certbot и его Apache-плагин из официальных репозиториев Debian.

Какие версии Certbot в разных Debian:

Версия DebianВерсия Certbot
Debian 13 (Trixie)4.x
Debian 12 (Bookworm)2.x
Debian 11 (Bullseye)1.x

Проверка установки:

certbot --version

3. 🔐 Получение сертификата и настройка HTTPS

Самый простой способ — запустить Certbot с флагами, которые сразу настроят HTTPS-редирект, HSTS и OCSP Stapling.

Замените в команде:

  • admin@example.com на ваш реальный email (туда будут приходить уведомления о продлении сертификата)
  • yourdomain.com на ваш реальный домен
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email admin@example.com -d yourdomain.com

Что делает каждый флаг:

ФлагЧто делает
--apacheИспользует Apache-плагин для
автоматического изменения конфигурации
--agree-tosСоглашается с условиями использования
Let’s Encrypt
--redirectНастраивает постоянный 301 редирект с HTTP
на HTTPS
--hstsДобавляет заголовок Strict-Transport-Security
(браузеры будут запоминать использовать
только HTTPS)
--staple-ocspВключает OCSP Stapling (ускоряет проверку
статуса сертификата)
--emailEmail для уведомлений о продлении и
проблемах
-dДомен (или несколько доменов) для
сертификата

Если вам нужен сертификат сразу для нескольких доменов (например, example.com и www.example.com):

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email admin@example.com -d example.com -d www.example.com

Ожидаемый вывод в терминале (сокращённо):

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/yourdomain.com/privkey.pem
This certificate expires on 2026-03-02.
These files will be updated when the certificate renews.

3.1 Интерактивный режим (если не хотите указывать все флаги)

Можно запустить Certbot без флагов, и он задаст вопросы:

sudo certbot --apache

Вас спросят:

  • Email (обязательно)
  • Согласие с условиями (введите A)
  • Нужно ли делиться email с EFF (обычно N)
  • Для каких доменов из конфигурации Apache выдать сертификат (введите номер или номера через запятую)
  • Нужен ли редирект HTTP → HTTPS (выберите 2 — редирект, это безопасно)

4. ✅ Проверка установленного сертификата

Через Certbot

sudo certbot certificates

Ожидаемый вывод в терминале:

Found the following certs:
  Certificate Name: yourdomain.com
    Domains: yourdomain.com
    Expiry Date: 2026-03-02 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem
    Key Type: ECDSA

Через браузер

Откройте ваш сайт по HTTPS (например, https://yourdomain.com). В адресной строке должен появиться замочек (значок безопасности). Нажмите на него — увидите информацию о сертификате.

5. 🔄 Автоматическое обновление сертификатов

Сертификаты Let’s Encrypt действуют 90 дней. Certbot настраивает автоматическое обновление через systemd-таймер.

Проверка, что таймер активен:

sudo systemctl status certbot.timer

Ожидаемый вывод в терминале (сокращённо):

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled)
     Active: active (waiting)

Что важно: Таймер запускается дважды в сутки (в районе полуночи и полудня, с рандомной задержкой). Certbot проверяет, не истекает ли сертификат в ближайшие 30 дней. Если истекает — обновляет.

Ручная проверка обновления (тестовый прогон):

sudo certbot renew --dry-run

Ожидаемый вывод в конце:

Congratulations, all simulated renewals succeeded

Если вы видите эту строку — автоматическое обновление будет работать.

6. 🚀 Усиление конфигурации Apache (опционально)

Certbot уже настраивает базовую безопасность. Но для максимальной оценки A+ на SSL Labs нужно добавить HTTP/2, дополнительные заголовки безопасности и современные шифры.

6.1 Включение необходимых модулей Apache

sudo a2enmod ssl socache_shmcb rewrite headers http2
sudo systemctl reload apache2

Что делает: Включает модули: SSL, перезапись URL, заголовки, HTTP/2.

6.2 Редактирование SSL-конфигурации Apache

Certbot создаёт отдельный файл конфигурации для HTTPS, обычно с суффиксом -le-ssl.conf. Например:

sudo nano /etc/apache2/sites-available/yourdomain.com-le-ssl.conf

6.3 Добавление заголовков безопасности

Внутри секции <VirtualHost *:443> добавьте следующие строки:

# HTTP/2
Protocols h2 http/1.1

# HSTS (Strict-Transport-Security)
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

# Дополнительные заголовки безопасности
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"

Что делает каждый заголовок:

ЗаголовокЗначениеЗачем
Strict-Transport-Securitymax-age=63072000; includeSubDomains; preloadБраузеры запоминают это
правило на 2 года и в течение
этого времени подключаются
к сайту только по HTTPS.
X-Content-Type-OptionsnosniffЗапрещает браузеру угадывать
MIME-тип
X-Frame-OptionsSAMEORIGINЗащита от clickjacking
(встраивание в iframe)
Referrer-Policystrict-origin-when-cross-originКонтролирует передачу Referer

6.4 Современные протоколы и шифры (опционально)

Добавьте в ту же секцию <VirtualHost *:443>:

# Протоколы: только TLS 1.2 и 1.3
SSLProtocol -all +TLSv1.2 +TLSv1.3

# Современные шифры (Mozilla Intermediate)
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off

# OCSP Stapling (у Certbot уже включено, но добавим кэш)
SSLUseStapling On
SSLStaplingCache "shmcb:/var/run/apache2/ssl_stapling(32768)"

Примечание: Директива SSLStaplingCache должна быть в глобальной конфигурации (вне <VirtualHost>). Если её нет, добавьте в /etc/apache2/mods-enabled/ssl.conf или в начало файла виртуального хоста.

6.5 Редирект HTTP → HTTPS (в файле конфигурации для порта 80)

Убедитесь, что в файле /etc/apache2/sites-available/yourdomain.com.conf (для порта 80) есть редирект:

<VirtualHost *:80>
    ServerName yourdomain.com
    Redirect permanent / https://yourdomain.com/
</VirtualHost>

Или, если нужно исключить .well-known для Certbot:

<VirtualHost *:80>
    ServerName yourdomain.com
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

6.6 Проверка и перезагрузка Apache

sudo apachectl configtest

Ожидаемый вывод: Syntax OK

sudo systemctl reload apache2

7. ⚠️ Решение типичных проблем

7.1 Ошибка: Challenge failed для домена (невалидация)

Симптом: Certbot выдаёт ошибку валидации домена.

Причина: Let’s Encrypt не может получить доступ к временному файлу через HTTP. Чаще всего проблема в DNS или фаерволе.

Пошаговое решение:

Шаг 1: Проверьте, что DNS A-запись вашего домена указывает на ваш сервер:

getent hosts yourdomain.com

Ожидаемый вывод: IP-адрес вашего сервера.

Шаг 2: Проверьте, что Apache слушает порт 80:

sudo ss -tlnp | grep ':80'

Шаг 3: Проверьте UFW:

sudo ufw status | grep -E '80|Apache'

Если порты закрыты — откройте:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

7.2 Ошибка: Apache не запускается после настройки SSL

Симптом: sudo systemctl reload apache2 не работает, apachectl configtest показывает ошибку, например:

Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included

Причина: Не включён модуль ssl.

Решение:

sudo a2enmod ssl
sudo systemctl reload apache2

7.3 Смешанный контент (Mixed Content) после перехода на HTTPS

Симптом: Страница открывается по HTTPS, но браузер показывает предупреждение, что некоторые ресурсы (изображения, скрипты) загружаются по HTTP.

Причина: В коде страницы ссылки на ресурсы прописаны как http://, а не как https:// или относительные.

Решение: Обновите все внутренние ссылки на HTTPS или относительные (/image.jpg). Для WordPress можно использовать плагин «Really Simple SSL».

7.4 Ошибка: Rate Limit (слишком много сертификатов)

Симптом: Certbot выдаёт:

Error creating new order :: too many certificates already issued for exact set of domains

Причина: Let’s Encrypt ограничивает количество сертификатов для одного домена (обычно 50 в неделю).

Пошаговое решение:

Шаг 1: Используйте тестовое окружение (staging) для экспериментов:

sudo certbot --apache --staging -d yourdomain.com

Шаг 2: Если нужно срочно — подождите неделю, лимит сбросится.

8. ❌ Удаление Certbot и сертификатов

Если вы хотите полностью удалить Certbot и Let’s Encrypt сертификаты.

8.1 Удаление сертификата (без отзыва)

sudo certbot delete --cert-name yourdomain.com

8.2 Удаление пакетов Certbot

sudo systemctl disable --now certbot.timer
sudo apt remove --purge certbot python3-certbot-apache -y
sudo apt autoremove -y

8.3 Удаление конфигурационных файлов Let’s Encrypt

⚠️ Осторожно: Удаляет все сертификаты и настройки Certbot.

sudo rm -rf /etc/letsencrypt /var/lib/letsencrypt /var/log/letsencrypt

8.4 Возврат конфигурации Apache

Вам нужно вручную отредактировать файлы виртуальных хостов в /etc/apache2/sites-available/:

  • Удалить строки с SSLCertificateFile, SSLCertificateKeyFile, Redirect, заголовки безопасности.

Затем проверить и перезагрузить Apache:

sudo apachectl configtest
sudo systemctl reload apache2

9. 📝 Чек-лист: всё готово к работе

  • [ ] Домен смотрит на ваш сервер (проверка: getent hosts yourdomain.com)
  • [ ] Порты 80 и 443 открыты в фаерволе
  • [ ] Apache установлен и есть виртуальный хост для вашего домена
  • [ ] Certbot и плагин установлены (certbot --version)
  • [ ] Сертификат получен (sudo certbot certificates)
  • [ ] Сайт открывается по HTTPS, в браузере зелёный замочек
  • [ ] Таймер обновления активен (sudo systemctl status certbot.timer)
  • [ ] Тестовый прогон обновления прошёл (sudo certbot renew --dry-run)
  • HTTP/2 включён и заголовки безопасности добавлены

Заключение

Вы настроили HTTPS для вашего сайта на Apache с помощью Let’s Encrypt. Теперь все данные между посетителями и сервером шифруются. Certbot автоматически обновит сертификат через systemd-таймер, и вам не нужно об этом вспоминать. Главные моменты, которые нужно помнить: перед запуском Certbot домен уже должен смотреть на сервер, а порты 80 и 443 — быть открытыми. Если вы хотите усилить конфигурацию, раздел 6 показывает, как добавить HTTP/2, HSTS и другие заголовки безопасности.

Что дальше:

  • Настройте автоматическую отправку логов и мониторинг (например, через Fail2Ban)
  • Добавьте дополнительные заголовки безопасности (X-Frame-Options, X-Content-Type-Options)
  • Проверьте оценку вашего сайта на SSL Labs
  • Если у вас Nginx вместо Apache, используйте наше руководство для Nginx