Изменить версию TLS на сервере Apache

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

Мне нужно использовать платежный сервис для моего проекта, поэтому я создал API с методом GET. Я отправил его провайдеру, и он сказал, что все работает. Однако наша система не может работать с этим API, потому что вы используете TLSv1.3, а мы используем 1.2. Чтобы решить эту проблему, я создал поддомен и попытался изменить TLSv только для этого поддомена.
Для SSL-сертификата я использую “Let’s Encrypt”.

Вот мой pay.example.conf

<VirtualHost *:80>
    # Директива ServerName устанавливает схему запроса, имя хоста и порт, которые
    # сервер использует для идентификации себя. Это используется при создании
    # URL перенаправлений. В контексте виртуальных хостов, ServerName
    # указывает, какое имя хоста должно появиться в заголовке Host: запроса, чтобы
    # совпасть с этим виртуальным хостом. Для виртуального хоста по умолчанию (этого файла) это
    # значение не является решающим, так как используется в качестве последнего средства хоста в любом случае.
    # Однако, вы должны явно задать его для любого следующего виртуального хоста.
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
    ServerName pay.example.com
    DocumentRoot /var/www/html/public

    <Directory /var/www/html/public>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
    </Directory>

    # Включение только TLS 1.2
    SSLProtocol TLSv1.2
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder on


    # Доступные уровни логирования: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # Также возможно настроить уровень логирования для конкретных
    # модулей, например
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # Для большинства файлов конфигурации из conf-available/,
    # которые включены или отключены на глобальном уровне, возможно
    # включить строку только для одного конкретного виртуального хоста. Например,
    # следующая строка включает конфигурацию CGI для этого хоста только
    # после того, как она была глобально отключена с "a2disconf".
    #Include conf-available/serve-cgi-bin.conf

    # RewriteEngine on
    # RewriteCond %{SERVER_NAME} =pay.example.com
    # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Вот pay.example-le-ssl.conf

<IfModule mod_ssl.c>
 <VirtualHost *:443>
    # Директива ServerName устанавливает схему запроса, имя хоста и порт, которые
    # сервер использует для идентификации себя. Это используется при создании
    # URL перенаправлений. В контексте виртуальных хостов, ServerName
    # указывает, какое имя хоста должно появиться в заголовке Host: запроса, чтобы
    # совпасть с этим виртуальным хостом. Для виртуального хоста по умолчанию (этого файла) это
    # значение не является решающим, так как используется в качестве последнего средства хоста в любом случае.
    # Однако, вы должны явно задать его для любого следующего виртуального хоста.
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
    ServerName pay.example.com
    DocumentRoot /var/www/html/public

    <Directory /var/www/html/public>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
    </Directory>

    # Включение только TLS 1.2
    SSLEngine on
    SSLProtocol -all +TLSv1.2
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder on

    # Доступные уровни логирования: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # Также возможно настроить уровень логирования для конкретных
    # модулей, например
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # Для большинства файлов конфигурации из conf-available/,
    # которые включены или отключены на глобальном уровне, возможно
    # включить строку только для одного конкретного виртуального хоста. Например,
    # следующая строка включает конфигурацию CGI для этого хоста только
    # после того, как она была глобально отключена с "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
    RewriteEngine on
    # Некоторые правила перезаписи в этом файле были отключены на вашем HTTPS-сайте,
    # потому что они имеют потенциал создания циклов перенаправления.

    # RewriteCond %{SERVER_NAME} =pay.example.com
    # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]


    SSLCertificateFile /etc/letsencrypt/live/pay.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/pay.example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
 </VirtualHost>
</IfModule>

он возвращает успех с 1.2 1.3 1.1

curl -v https://pay.example.com --tlsv1.2

Что я могу сделать в это время?

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

В этой статье мы рассмотрим, как изменить версию TLS на сервере Apache для конкретного поддомена, чтобы она использовала TLS 1.2. Из вашего описания ясно, что вы использовали конфигурацию для SSL-протоколов, но, несмотря на ваши настройки, ваш сервер по-прежнему поддерживает несколько версий TLS, включая TLS 1.3, TLS 1.2 и TLS 1.1. Мы пройдемся по теоретическим аспектам, приведем примеры, а затем рассмотрим, как применять эти знания на практике, чтобы решить вашу задачу.

Теория

TLS и его важность: TLS (Transport Layer Security) — это протокол, обеспечивающий защиту данных при их передаче по сети. Существует несколько версий TLS, начиная от 1.0 и заканчивая 1.3. Каждая последующая версия, как правило, безопаснее предыдущей за счет исправления уязвимостей и улучшения механизмов шифрования. Однако совместимость с некоторыми старыми системами может потребовать использования конкретной версии, такой как TLS 1.2.

Конфигурация Apache для TLS: Apache позволяет настраивать какие версии TLS и наборы шифров могут использоваться для каждого виртуального хоста. Это означает, что вы можете задать различные параметры для разных доменов или поддоменов на одном сервере, как это необходимо в вашем случае. Основные директивы для управления версиями TLS — это SSLProtocol и SSLCipherSuite.

Пример

Ваш текущий конфигурационный файл pay.example-le-ssl.conf содержит следующие ключевые строки для TLS настройки:

SSLEngine on
SSLProtocol -all +TLSv1.2
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on

Применение

Проверка конфигурации

  1. Директива SSLProtocol:

    • Текущая настройка: SSLProtocol -all +TLSv1.2
    • Она должна блокировать все версии TLS, кроме 1.2. Однако исходя из того, что ваши попытки все же показывают поддержку других версий, возможно, существует конфигурация, которая переопределяет эту настройку.
  2. Поиск глобальных конфигураций:

    • Проверьте конфигурационные файлы Apache, такие как ssl.conf, которые могут содержать инструкции, переопределяющие значения в вашем виртуальном хосте.
    • Настройки в /etc/letsencrypt/options-ssl-apache.conf могут также содержать более расслабленные директивы, которые добавляют поддержку нежелательных TLS версий.
  3. Актуализация конфигурации:

    • Убедитесь, что в options-ssl-apache.conf или других включаемых файлах нет директив, конфликтующих с вашим VirtualHost. Если такие директивы найдены, сконфигурируйте их соответствующе или удалите/переопределите конкретно для вашего Виртуального хоста.

Диагностика и перепроверка

  1. Перезапуск Apache:

    • После внесения изменений убедитесь, что вы перезапустили Apache: sudo systemctl restart apache2.
  2. Тестирование конфигурации:

    • Используйте различные версии TLS через инструмент curl, чтобы проверить использование только той версии, которую вы настроили:
      curl -v --tls-max 1.2 https://pay.example.com
    • Если при тестировании установлено, что другие версии TLS все еще активны, следует искать скрытые переопределения в глобальных конфигурациях.

Дополнительные меры

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

    LogLevel info ssl:debug
  2. Проверка на внешних сайтах: После внесения всех изменений можно проверить настройки вашего SSL через онлайн-сервис, такой как Qualys SSL Labs, чтобы удостовериться, что сервер использует только TLS 1.2.

Заключение

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

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

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