Установка SSL сертификата Apache на Ubuntu - Пошаговая инструкция | AdminWiki

Установка SSL сертификата Apache на Ubuntu: Полное руководство для DevOps

17 декабря 2025 7 мин. чтения #apache #devops #https #ssl #ubuntu #безопасность #сертификат

Представь, что твой веб-сервер Apache работает по HTTP — это как отправлять открытки с паролями по почте. Любой может перехватить данные. Сегодня мы разберем, как установить SSL сертификат на Apache и перейти на безопасный HTTPS протокол. Давай превратим твой сервер в цифровую крепость!

Что такое SSL сертификат и зачем он нужен?

SSL (Secure Sockets Layer) — это технология шифрования, которая создает защищенное соединение между браузером пользователя и твоим сервером. После установки SSL сертификата на Apache:

  • Данные передаются в зашифрованном виде
  • Появляется зеленый замочек в адресной строке
  • Повышается доверие пользователей
  • Улучшаются позиции в поисковых системах
  • Соответствие современным стандартам безопасности
Важно: В этой статье мы рассмотрим установку SSL сертификата на Apache Ubuntu — одну из самых популярных комбинаций в мире веб-хостинга.

Подготовка к установке сертификата Apache

Перед тем как начать установку SSL сертификата на Apache, убедись, что у тебя есть:

Необходимые компоненты

  • Работающий Apache2 на Ubuntu (версия 18.04, 20.04 или 22.04)
  • Доступ к серверу с правами sudo/root
  • Зарегистрированное доменное имя
  • SSL сертификат (купленный или от Let's Encrypt)

Шаг 1: Установка необходимых модулей Apache

Для работы SSL на Apache нужны специальные модули. Давай установим их:

bash
# Обновляем пакеты
sudo apt update
sudo apt upgrade -y

# Устанавливаем модуль SSL для Apache
sudo apt install apache2 -y
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite

# Перезапускаем Apache для применения изменений
sudo systemctl restart apache2

Шаг 2: Подготовка SSL сертификатов

Есть два основных пути получения SSL сертификата:

Тип сертификата Плюсы Минусы Для кого
Let's Encrypt (бесплатный) Бесплатно, автоматическое обновление Действует 90 дней Стартапы, блоги, тестовые среды
Платный (Comodo, Symantec) Гарантии, поддержка, доверие Стоимость, сложнее получить Корпорации, интернет-магазины

Вариант A: Установка бесплатного сертификата Let's Encrypt

bash
# Устанавливаем Certbot для автоматической установки SSL
sudo apt install certbot python3-certbot-apache -y

# Получаем и устанавливаем SSL сертификат
sudo certbot --apache -d example.com -d www.example.com

# Проверяем автоматическое обновление
sudo systemctl status certbot.timer

Вариант B: Ручная установка платного сертификата

Если ты купил SSL сертификат, у тебя должны быть три файла:

  • domain.crt — основной сертификат
  • domain.key — приватный ключ
  • ca_bundle.crt — цепочка доверия (интермедиаты)
bash
# Создаем директорию для SSL сертификатов
sudo mkdir -p /etc/apache2/ssl/example.com

# Копируем файлы сертификата (замени example.com на свой домен)
sudo cp domain.crt /etc/apache2/ssl/example.com/
sudo cp domain.key /etc/apache2/ssl/example.com/
sudo cp ca_bundle.crt /etc/apache2/ssl/example.com/

# Устанавливаем правильные права доступа
sudo chmod 600 /etc/apache2/ssl/example.com/domain.key
sudo chmod 644 /etc/apache2/ssl/example.com/*.crt
Внимание: Приватный ключ (domain.key) должен быть защищен! Никогда не делись им и устанавливай минимальные права доступа (600).

Шаг 3: Настройка виртуального хоста Apache для HTTPS

Теперь настроим Apache для работы с SSL. Создадим или отредактируем конфигурационный файл:

config
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/html

    # Логи
    ErrorLog ${APACHE_LOG_DIR}/example.com-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-ssl-access.log combined

    # SSL конфигурация
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/example.com/domain.crt
    SSLCertificateKeyFile /etc/apache2/ssl/example.com/domain.key
    SSLCertificateChainFile /etc/apache2/ssl/example.com/ca_bundle.crt

    # Безопасные настройки SSL
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder on
    SSLCompression off

    # HSTS - принудительное использование HTTPS
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    # Редирект с HTTP на HTTPS (опционально, настраивается отдельно)
    # RewriteEngine on
    # RewriteCond %{SERVER_NAME} =example.com [OR]
    # RewriteCond %{SERVER_NAME} =www.example.com
    # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Активация виртуального хоста

bash
# Сохраняем конфиг (замени example.com на свое имя)
sudo nano /etc/apache2/sites-available/example.com-ssl.conf

# Активируем сайт
sudo a2ensite example.com-ssl.conf

# Проверяем синтаксис конфигурации
sudo apache2ctl configtest

# Если все OK, перезапускаем Apache
sudo systemctl reload apache2

Шаг 4: Настройка редиректа с HTTP на HTTPS

Чтобы все пользователи автоматически переходили на защищенную версию, настроим редирект:

config
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    
    # Редирект всех запросов на HTTPS
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
    
    # Альтернативный вариант
    # Redirect permanent / https://example.com/
</VirtualHost>
bash
# Отключаем стандартный HTTP сайт если он есть
sudo a2dissite 000-default.conf

# Активируем наш HTTP редирект
sudo a2ensite example.com-redirect.conf

# Включаем модуль rewrite если еще не включен
sudo a2enmod rewrite

# Перезапускаем Apache
sudo systemctl reload apache2

Шаг 5: Проверка установки SSL сертификата

После установки SSL сертификата на Apache Ubuntu важно проверить, что все работает правильно:

bash
# Проверяем, что Apache слушает порт 443
sudo netstat -tulpn | grep :443

# Проверяем статус Apache
sudo systemctl status apache2

# Тестируем SSL соединение (если установлен openssl)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

Онлайн-инструменты для проверки

  • SSL Labs Test — полный анализ безопасности
  • SSL Checker — проверка цепочки сертификатов
  • Why No Padlock — поиск проблем со смешанным контентом

Частые проблемы и их решения

Проблема 1: Ошибка "SSL_ERROR_RX_RECORD_TOO_LONG"

Причина: Apache слушает порт 443, но SSL не включен для этого виртуального хоста.

Решение: Добавь SSLEngine on в конфигурацию VirtualHost *:443

Проблема 2: "NET::ERR_CERT_AUTHORITY_INVALID"

Причина: Неправильная цепочка сертификатов или отсутствие промежуточных сертификатов.

Решение: Убедись, что используешь SSLCertificateChainFile с правильным ca_bundle.crt

Проблема 3: Apache не перезапускается после изменений

Причина: Синтаксическая ошибка в конфигурационном файле.

Решение: Используй sudo apache2ctl configtest для проверки синтаксиса

Автоматическое обновление Let's Encrypt сертификатов

Если ты использовал Let's Encrypt, настрой автоматическое обновление:

bash
# Проверяем, когда истекает сертификат
sudo certbot certificates

# Тестируем автоматическое обновление
sudo certbot renew --dry-run

# Добавляем автоматическое обновление в cron
sudo crontab -e
# Добавляем строку (обновление каждый понедельник в 3:00)
0 3 * * 1 /usr/bin/certbot renew --quiet
Производительность: После установки SSL сертификата на Apache, включи кэширование SSL сессий для улучшения производительности: SSLSessionCache и SSLSessionCacheTimeout.

Бонус: Оптимизация производительности SSL

После успешной установки SSL сертификата на Apache Ubuntu, оптимизируй настройки:

config
# В конфигурации SSL добавь:
# Кэширование SSL сессий (улучшает производительность)
SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)
SSLSessionCacheTimeout 300

# Использование OCSP Stapling (ускоряет проверку сертификата)
SSLUseStapling on
SSLStaplingCache shmcb:/var/run/apache2/ssl_stapling_cache(128000)

# Современные протоколы
SSLProtocol TLSv1.2 TLSv1.3

# Отключение старых небезопасных шифров
SSLCipherSuite HIGH:!aNULL:!MD5:!RC4:!3DES

Итоговая проверочная таблица

  • ✅ Apache слушает порт 443: netstat -tulpn | grep :443
  • ✅ SSL модуль включен: apache2ctl -M | grep ssl
  • ✅ Сертификаты имеют правильные права: ls -la /etc/apache2/ssl/
  • ✅ Конфигурация без ошибок: apache2ctl configtest
  • ✅ HTTPS доступен в браузере: https://example.com
  • ✅ Редирект HTTP→HTTPS работает: http://example.com

Поздравляю! Ты успешно выполнил установку SSL сертификата на Apache. Теперь твой сайт защищен, пользователи доверяют тебе больше, а поисковые системы ранжируют выше. Помни — безопасность это не разовое мероприятие, а постоянный процесс. Регулярно обновляй сертификаты и следи за новыми уязвимостями в SSL/TLS протоколах.

Если возникнут вопросы — возвращайся к этой инструкции. Удачи в твоих DevOps приключениях! 🚀

Поделиться:
Сохранить гайд? В закладки браузера