sadrix logoSadriX
Гайды

Как включить HTTPS на Apache в Ubuntu: пошаговое руководство

Настройка SSL/TLS за 15 минут с бесплатным сертификатом Let's Encrypt

010 364 просмотров4 мин
0
Поделиться:TelegramVK

Введение

HTTPS — это стандарт безопасности для современных сайтов. Шифрование трафика защищает данные пользователей, улучшает позиции в поисковых системах и повышает доверие посетителей. Если вы используете веб-сервер Apache на Ubuntu, включить HTTPS можно бесплатно с помощью сертификатов Let's Encrypt.

В этом руководстве мы разберём полный процесс: от установки необходимых пакетов до автоматического продления сертификата. Инструкция подойдёт для Ubuntu 20.04, 22.04 и 24.04 LTS.

Требования

Перед началом убедитесь, что выполнены следующие условия:

  • Ubuntu 20.04 или новее с правами sudo.

  • Установленный Apache (пакет apache2). Проверить: apache2 -v.

  • Зарегистрированное доменное имя, направленное на IP-адрес сервера (A-запись).

  • Открытые порты 80 и 443 в брандмауэре (UFW или облачный firewall).

  • Доступ к терминалу сервера по SSH.

Если Apache ещё не установлен, выполните:

sudo apt update
sudo apt install apache2

Шаг 1. Проверка DNS и доступности сервера

Убедитесь, что домен указывает на ваш сервер:

dig +short example.com

Команда должна вернуть IP вашего сервера. Если DNS ещё не обновился, подождите 15–30 минут.

Проверьте, что Apache отвечает по HTTP:

curl -I http://example.com

Ожидаемый ответ — HTTP/1.1 200 OK или 301. Если сайт недоступен, сначала настройте виртуальный хост для порта 80.

Шаг 2. Настройка брандмауэра

Если используется UFW, разрешите профили Apache:

sudo ufw allow 'Apache Full'
sudo ufw status

Профиль Apache Full открывает порты 80 и 443. Если UFW не установлен, пропустите шаг, но проверьте настройки облачного firewall (AWS Security Groups, Yandex Cloud и т.п.).

Шаг 3. Установка Certbot

Certbot — официальный клиент Let's Encrypt. Установите его вместе с плагином для Apache:

sudo apt update
sudo apt install certbot python3-certbot-apache

Проверьте версию:

certbot --version

Шаг 4. Проверка конфигурации Apache

Перед получением сертификата убедитесь, что виртуальный хост корректно настроен. Откройте файл:

sudo nano /etc/apache2/sites-available/example.com.conf

Пример минимальной конфигурации для HTTP:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

Активируйте сайт и перезагрузите Apache:

sudo a2ensite example.com.conf
sudo systemctl reload apache2

Шаг 5. Получение SSL-сертификата Let's Encrypt

Запустите Certbot в интерактивном режиме:

sudo certbot --apache

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

1. Email — укажите действующий адрес для уведомлений об истечении. 2. Согласие с условиями — введите A. 3. Подписка на рассылку — на ваше усмотрение (Y или N). 4. Выбор доменов — отметьте нужные (например, example.com и www.example.com). 5. Редирект HTTP → HTTPS — выберите 2 (Redirect), чтобы весь трафик шёл по защищённому протоколу.

Certbot автоматически:

  • получит сертификат;

  • создаст файл /etc/apache2/sites-available/example.com-le-ssl.conf;

  • настроит редирект с HTTP на HTTPS;

  • перезагрузит Apache.

Шаг 6. Проверка работы HTTPS

Откройте сайт в браузере: https://example.com. В адресной строке должен появиться замок.

Проверьте через curl:

curl -I https://example.com

Ответ должен содержать HTTP/2 200. Также проверьте редирект:

curl -I http://example.com

Ожидаемый код — 301 Moved Permanently с заголовком Location: https://example.com/.

Шаг 7. Настройка параметров SSL (опционально)

Для повышения безопасности можно усилить конфигурацию. Откройте файл SSL-хоста:

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

Добавьте внутрь блока <VirtualHost *:443>:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder off
SSLSessionTickets off

Эти параметры отключают устаревшие протоколы и слабые шифры. После изменений перезагрузите Apache:

sudo systemctl reload apache2

Шаг 8. Настройка автоматического продления

Сертификаты Let's Encrypt действуют 90 дней. Certbot устанавливает таймер systemd для автоматического продления. Проверьте его:

systemctl list-timers | grep certbot

Тестовая проверка продления:

sudo certbot renew --dry-run

Если тест прошёл успешно, ничего делать не нужно — продление будет происходить автоматически дважды в день при необходимости.

Шаг 9. Обновление сертификата вручную

Если автоматическое продление не сработало, выполните:

sudo certbot renew

Для принудительного продления конкретного домена:

sudo certbot renew --cert-name example.com --force-renewal

После продления перезагрузите Apache:

sudo systemctl reload apache2

Шаг 10. Проверка конфигурации и логов

Перед перезагрузкой всегда проверяйте синтаксис:

sudo apache2ctl configtest

Ожидаемый вывод: Syntax OK. Логи ошибок Apache:

sudo tail -f /var/log/apache2/error.log

Логи Certbot:

sudo tail -f /var/log/letsencrypt/letsencrypt.log

Типичные ошибки

1. Certbot не может подтвердить домен

Причина: DNS не указывает на сервер или порт 80 закрыт. Решение: проверьте dig +short example.com и откройте порт 80.

2. Конфликт виртуальных хостов

Причина: несколько сайтов с одинаковым ServerName или отсутствие ServerAlias. Решение: убедитесь, что каждый домен описан в отдельном файле и a2ensite выполнен.

3. Ошибка "Too many requests"

Причина: превышен лимит запросов Let's Encrypt (5 неудачных попыток в час). Решение: подождите час или используйте staging-сервер: sudo certbot --apache --staging.

4. Сайт не открывается после настройки

Причина: Apache не перезагружен или порт 443 закрыт. Решение: sudo systemctl reload apache2 и sudo ufw allow 'Apache Full'.

5. Смешанный контент (Mixed Content)

Причина: на странице загружаются ресурсы по HTTP (картинки, скрипты). Решение: замените все http:// на https:// в HTML или используйте относительные ссылки.

FAQ

Можно ли получить сертификат без домена? Нет, Let's Encrypt выдаёт сертификаты только на публичные доменные имена. Для локальной разработки используйте самоподписанный сертификат.

Сколько стоит сертификат Let's Encrypt? Бесплатно. Let's Encrypt — некоммерческая организация, поддерживаемая сообществом.

Что будет, если сертификат истёк? Браузеры покажут предупреждение о небезопасном соединении. Продлите сертификат командой sudo certbot renew.

Как перенести сертификат на другой сервер? Скопируйте каталоги /etc/letsencrypt/live/ и /etc/letsencrypt/archive/, затем обновите пути в конфигурации Apache.

Нужно ли покупать платный сертификат? Для большинства сайтов достаточно Let's Encrypt. Платные сертификаты (OV, EV) нужны для корпоративных сайтов с расширенной проверкой.

Как отключить HTTPS и вернуться на HTTP? Удалите SSL-конфиг: sudo a2dissite example.com-le-ssl.conf, затем перезагрузите Apache. Сертификат можно удалить: sudo certbot delete.

Итог

Включение HTTPS на Apache в Ubuntu занимает не более 15 минут. Certbot автоматизирует получение и продление сертификатов, а Apache корректно перенаправляет трафик на защищённый протокол. Регулярно проверяйте срок действия сертификата и следите за логами, чтобы сайт оставался доступным и безопасным.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.