Исправить стандартную конфигурацию SSL на Apache

Вопрос или проблема

У меня есть несколько виртуальных хостов, обслуживающих сайты на apache. У каждого сайта есть свой собственный файл конфигурации, и многие имеют установленный SSL-сертификат.

Файл 00_default.conf <VirtualHost *:80> указывает на статическую страницу типа 404.

Это всё работает хорошо…
Моя проблема в том, что если вы посещаете сайт в режиме https, у которого не настроен SSL или нет файла конфигурации, он по умолчанию использует SSL-сертификат из первого файла конфигурации, который он находит и который содержит <VirtualHost *:443>.

Я предполагаю, что мне нужно создать правило в 00_default.conf, чтобы обрабатывать запросы на страницы, которых не существует при запросе через HTTPS. Пока я не нашел конфигурацию, которая работает.

Есть две вещи:

  • вы всегда получите предупреждение/ошибку в браузере, когда подключаетесь с HTTPS к веб-сайту на веб-сервере, который не предоставляет действительный TLS-сертификат, который включает имя веб-сайта, введенное в URL. Назначение другого виртуального хоста для обработки этих запросов не изменит этой основной истины.
  • Назначение конкретного виртуального хоста в качестве стандартного HTTPS виртуального хоста лишь изменит, какой (несоответствующий) TLS-сертификат будет представлен и какой веб-контент будет показан.

Лучший способ правильно решить эту проблему — настроить HTTPS для всех веб-сайтов, которые вы хостите на своем веб-сервере.

В отсутствие этого: вероятно, проще всего добавить запись HTTPS VirtualHost в ваш существующий 00_default.conf, в результате чего получится что-то вроде:

<VirtualHost _default_:80>
        ServerName      www.example.com
        ServerAlias     example.com
        DocumentRoot    /var/www/html/www.example.com/
</VirtualHost>

<VirtualHost _default_:443>
        ServerName      www.example.com
        ServerAlias     example.com
        DocumentRoot    /var/www/html/www.example.com/
        SSLEngine on
        SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
        SSLHonorCipherOrder On
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
        Header always set X-Frame-Options DENY
        Header always set X-Content-Type-Options nosniff
        SSLCompression off
        SSLUseStapling on
        SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
        SSLCACertificateFile /etc/letsencrypt/live/www.example.com/chain.pem
</VirtualHost>

Ответ или решение

Правильная конфигурация SSL для Apache

Если у вас есть несколько виртуальных хостов, работающих на Apache, некоторые из которых уже настроены с SSL сертификатами, важно правильно организовать конфигурацию, чтобы избежать возможных проблем с безопасностью и пользовательским опытом. Ниже мы рассматриваем правильные настройки SSL для вашего веб-сервера Apache, особенно когда речь идет о конфигурации по умолчанию.

Проблема

Когда пользователи пытаются получить доступ к сайтам по HTTPS, которые не имеют корректной SSL конфигурации или не имеют соответствующего файла конфигурации, Apache использует первый сертификат, найденный в конфигурации. Это может привести к предупреждениям браузера о несуществующих или недействительных сертификатах, что негативно сказывается на доверии пользователей.

Решение

Лучший способ решить проблему — обеспечить наличие корректной SSL настройки для каждого сайта. Однако если это невозможно, вы можете настроить виртуальный хост по умолчанию для обработки таких запросов. В этом случае вы можете создать новый запись <VirtualHost> для HTTPS в файле 00_default.conf, обеспечивая безопасный и корректный ответ для недоступных сайтов.

Вот пример конфигурации, которая может быть добавлена в ваш файл:

<VirtualHost _default_:80>
    DocumentRoot /var/www/html
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost _default_:443>
    DocumentRoot /var/www/html
    ServerName example.com
    SSLEngine on
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder On
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
    Header always set X-Frame-Options DENY
    Header always set X-Content-Type-Options nosniff
    SSLCompression off
    SSLUseStapling on
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCACertificateFile /etc/letsencrypt/live/example.com/chain.pem

    # Выдача 404 для недоступных сайтов
    ErrorDocument 404 /404.html
</VirtualHost>

Разбор конфигурации

  1. Переадресация с HTTP на HTTPS: В первом виртуальном хосте по умолчанию мы перенаправляем все запросы с http:// на https:// для домена example.com. Это гарантирует, что пользователи автоматически будут использованы безопасный протокол.

  2. Настройки TLS/SSL: В <VirtualHost _default_:443> вы настраиваете протоколы и шифры для безопасности. Исключены устаревшие и ненадежные версии протокола SSL и TLS, что минимизирует риски атак.

  3. Заголовки безопасности: Использование заголовков, таких как Strict-Transport-Security, X-Frame-Options, и X-Content-Type-Options, улучшает безопасность и защищает от различных угроз.

  4. Обработка ошибок: Конфигурация включает обработку 404 ошибок, что позволяет пользователю видеть страницу с уведомлением, если запрашиваемый сайт отсутствует.

Заключение

Хотя наилучшее решение — это обладать SSL сертификатом для каждого вашего сайта, предложенные изменения помогут вам управлять ситуацией, когда сайт не доступен по HTTPS. Правильная конфигурация SSL не только улучшает безопасность вашего веб-сервера, но и защищает вашего пользователя от возможных угроз. Не забывайте регулярно обновлять свои сертификаты и поддерживать актуальность конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...