Настройка 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.