Настройка HTTPS на Apache в Ubuntu

Как включить HTTPS в Apache: сертификат, модуль mod_ssl, виртуальный хост на 443 порту и редирект с HTTP. Чем самоподписанный сертификат отличается от Let’s Encrypt.

Для HTTPS веб-серверу нужен сертификат и закрытый ключ. Для рабочего сайта используйте бесплатный сертификат Let’s Encrypt (см. «Установка Let’s Encrypt на Apache»). Самоподписанный сертификат подходит только для тестов и внутренних сервисов — браузеры показывают на нём предупреждение.

1. Самоподписанный сертификат

sudo apt install openssl
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
  -keyout server.key -out server.pem

Ключ -nodes создаёт ключ без пароля — иначе Apache будет спрашивать его при каждом запуске. OpenSSL попросит заполнить поля: C — код страны (RU), ST — регион, L — город, O — организация, OU — отдел, CN — домен сайта.

sudo cp server.pem /etc/ssl/certs/
sudo cp server.key /etc/ssl/private/
sudo chmod 600 /etc/ssl/private/server.key

2. Модуль SSL

sudo a2enmod ssl

3. Виртуальный хост для 443 порта

Скопируйте конфигурацию сайта из /etc/apache2/sites-available/example.conf в example-ssl.conf, замените <VirtualHost *:80> на <VirtualHost *:443> и добавьте внутрь:

SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCertificateFile /etc/ssl/certs/server.pem
SSLCertificateKeyFile /etc/ssl/private/server.key

Строка SSLProtocol отключает устаревшие протоколы: оставляются только TLS 1.2 и 1.3.

sudo a2ensite example-ssl.conf
sudo apachectl configtest && sudo systemctl reload apache2

4. Редирект с HTTP на HTTPS

В конфигурации сайта на 80 порту (example.conf) добавьте:

Redirect permanent / https://example.com/

Модуль mod_alias, который обрабатывает эту директиву, обычно уже включён (sudo a2enmod alias). После перезагрузки Apache все запросы по HTTP будут перенаправляться на HTTPS с кодом 301.

Все статьи

Расскажите о задаче — подберём платформу и оценим работу

Обсудить проект