← База знаний

Бесплатный SSL через Let's Encrypt: HTTPS на Apache за 5 команд

HTTPS давно перестал быть роскошью: браузеры помечают HTTP-сайты как «небезопасные», а без шифрования логины и данные форм передаются открытым текстом. Let's Encrypt даёт бесплатные SSL-сертификаты, а Certbot автоматизирует их получение и продление. Настроим HTTPS на Apache за несколько команд.

Что такое Let's Encrypt и Certbot

Let's Encrypt — это некоммерческий центр сертификации, который выдаёт SSL-сертификаты бесплатно. Certbot — официальная утилита, которая получает сертификат, сама прописывает его в конфигурацию веб-сервера и настраивает автоматическое продление. Сертификаты действуют 90 дней и продлеваются автоматически, так что после настройки о них можно забыть.

Что нужно перед началом

Три условия обязательны. Домен, направленный A-записью на IP вашего сервера — Let's Encrypt проверяет, что вы владеете доменом. Работающий сайт на Apache, доступный из интернета на порту 80. И открытые порты 80 (HTTP) и 443 (HTTPS) в фаерволе.

Инструкция актуальна для Ubuntu 22.04, 24.04 и 26.04 LTS.

Шаг 1. Проверяем виртуальный хост

Certbot определяет домен по директиве ServerName в конфигурации Apache. Убедитесь, что она задана. Откройте конфиг вашего сайта:

bash
sudo nano /etc/apache2/sites-available/ваш-сайт.conf

Внутри блока VirtualHost должны быть строки с вашим доменом:

apache
<VirtualHost *:80>
    ServerName eruscus.ru
    ServerAlias www.eruscus.ru
    DocumentRoot /var/www/html
</VirtualHost>

Если правили конфиг — проверьте синтаксис и перезагрузите Apache:

bash
sudo apache2ctl configtest
sudo systemctl reload apache2

Шаг 2. Открываем порты в фаерволе

Если используете UFW, разрешите HTTP и HTTPS одним профилем:

bash
sudo ufw allow 'Apache Full'
sudo ufw status

Профиль «Apache Full» открывает и порт 80, и порт 443.

Шаг 3. Устанавливаем Certbot

Раньше Certbot ставили через apt, но сейчас официальный способ — через snap: так вы получаете самую свежую версию с актуальными протоколами. Установите snap-ядро и Certbot:

bash
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot

Свяжите команду certbot с системным путём, чтобы вызывать её напрямую:

bash
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

Проверьте, что всё встало:

bash
certbot --version

Шаг 4. Получаем сертификат

Одна команда — Certbot запросит сертификат, пропишет его в конфигурацию Apache и включит HTTPS. Укажите свой домен (можно несколько через -d):

bash
sudo certbot --apache -d eruscus.ru -d www.eruscus.ru

При первом запуске Certbot задаст несколько вопросов:

Email — для уведомлений о продлении и важных предупреждений безопасности. Укажите рабочий адрес.

Согласие с условиями Let's Encrypt — нужно принять.

Рассылка от EFF — по желанию, можно отказаться.

Редирект — Certbot спросит, перенаправлять ли весь HTTP-трафик на HTTPS. Для боевого сайта выбирайте вариант 2 (Redirect) — тогда все, кто зайдёт по http://, автоматически попадут на https://.

После этого Certbot сообщит об успехе и покажет, где лежат файлы сертификата.

Шаг 5. Проверяем результат

Откройте сайт по https://ваш-домен и посмотрите на замок в адресной строке браузера — он означает, что соединение защищено. Проверьте, что http:// теперь редиректит на https://.

Сертификаты хранятся в /etc/letsencrypt/live/ваш-домен/ — там два ключевых файла: fullchain.pem (цепочка сертификата) и privkey.pem (приватный ключ). Приватный ключ остаётся только на вашем сервере, Let's Encrypt его никогда не видит.

Шаг 6. Проверяем автопродление

Сертификаты Let's Encrypt живут 90 дней, но Certbot ставит systemd-таймер, который дважды в день проверяет сертификаты и продлевает те, у которых осталось меньше 30 дней. Вам ничего делать не нужно.

Проверьте, что автопродление работает, тестовым прогоном (без реального продления):

bash
sudo certbot renew --dry-run

Если команда прошла без ошибок — продление настроено и сработает автоматически. Посмотреть таймер:

bash
sudo systemctl status snap.certbot.renew.timer

Проверка качества настройки

Хотите убедиться, что HTTPS настроен по-хорошему? Прогоните сайт через SSL Labs (ssllabs.com/ssltest) — он выставит оценку от A+ до F и покажет слабые места. Хорошая цель — оценка A или A+.

Если видите A+ — поздравляю, шифрование настроено правильно. Если оценка ниже, отчёт подскажет, что улучшить: обычно это отключение устаревших версий TLS и включение HSTS.

Частые проблемы

Certbot не может подтвердить домен — проверьте, что домен реально указывает на IP сервера (A-запись) и порт 80 открыт и доступен снаружи. Валидация идёт именно через порт 80.

Ошибка «connection refused» или таймаут — порт 80 закрыт фаерволом (в том числе на стороне хостинга или провайдера). Проверьте UFW и настройки облачного фаервола.

Смешанное содержимое (mixed content) — после включения HTTPS часть картинок или скриптов может грузиться по http://. Обновите такие ссылки на https:// или относительные пути, иначе браузер будет ругаться на «частично защищённое» соединение.

Итог

HTTPS через Let's Encrypt — это бесплатно, быстро и автоматически. После настройки сертификат продлевается сам, а посетители видят замок вместо предупреждения «небезопасно». Для любого сайта, который принимает данные форм или логины, это обязательный минимум — особенно если у вас развёрнут phpMyAdmin или другая админка, куда вводятся пароли.

Корпус Eruscus Blade 19" 1U Стоечный корпус на 4 платы Raspberry Pi с активным охлаждением.
Смотреть корпус →