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 (ускоряет проверку статуса сертификата) |
--email | Email для уведомлений о продлении и проблемах |
-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-Security | max-age=63072000; includeSubDomains; preload | Браузеры запоминают это правило на 2 года и в течение этого времени подключаются к сайту только по HTTPS. |
X-Content-Type-Options | nosniff | Запрещает браузеру угадывать MIME-тип |
X-Frame-Options | SAMEORIGIN | Защита от clickjacking (встраивание в iframe) |
Referrer-Policy | strict-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