Настройка Apache SSL / TLS в соответствии с контрольным списком BSI TR-03116-4

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

После нескольких недель чтения и тестирования я не могу создать стабильный файл Vhost, который удовлетворял бы всем критериям контрольного списка безопасности BSI. Я всегда проверяю с помощью tls-check.de и testssl.sh.

Либо один из шифросуитов TLS1.3 является недопустимым, TLS1.2 не включен, шифросуиты TLS1.2 некорректны или (если шифросуиты TLS1.2 корректны) критерии TLS1.3 не соответствуют.

Я запускаю контейнер Docker в сетевом режиме.

Мой файл конфигурации VHost в Apache выглядит следующим образом:

<IfModule mod_ssl.c> <VirtualHost *:443> ServerName $SERVERNAME ServerAdmin $ADMINMAIL DocumentRoot /var/www/html/public ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined <Directory "/var/www/html/public"> AllowOverride All Options -Indexes +FollowSymLinks -MultiViews Require all granted </Directory> Protocols h2 h2c http/1.1 H2Direct on H2Push on <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/" </FilesMatch> # Включение SSL SSLEngine on # Сертификат SSLCertificateFile /etc/letsencrypt/live/$SERVERNAME/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/$SERVERNAME/privkey.pem # Версии TLS (разрешить только TLS 1.2 и TLS 1.3) SSLProtocol -all +TLSv1.2 +TLSv1.3 # Шифросуиты TLS1.3 (нотация IANA) SSLCipherSuite TLSv1.3 TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384 # это исключает TLS_CHACHA20_POLY1305_SHA256 (не допускается контрольным списком BSI) # Шифросуиты (TLS 1.2) SSLCipherSuite ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384 # эта строка, кажется, игнорируется # Строгая проверка SNI SSLStrictSNIVHostCheck on # Принудительный порядок шифров SSLHonorCipherOrder on # сжатие SSL SSLCompression off # НSTS (строгая транспортная безопасность HTTP) Header всегда set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Дополнительный заголовок безопасности Header всегда set X-Content-Type-Options "nosniff" Header всегда set X-Frame-Options "DENY" Header всегда set X-XSS-Protection "1; mode=block" </VirtualHost> </IfModule> ServerTokens Prod ServerSignature Off SSLUseStapling On SSLStaplingCache "shmcb:logs/stapling_cache(32768)" 

Я прочитал всю документацию, спрашивал chatgpt, но ничего не работает. Может быть, у вас есть хорошая идея. спасибо

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

Конфигурация SSL/TLS для Apache, соответствующая требованиям BSI (Бундесама информационной безопасности, Германия) по чек-листу TR-03116-4, представляет собой важную задачу для обеспечения высокого уровня безопасности веб-сайтов и информационных систем. Этот документ задает строгие требования к защите данных и конфиденциальности, что делает его особенным при внедрении.

Теория (Theory)

В основе чек-листа BSI TR-03116-4 лежит необходимость использования современных и безопасных криптографических протоколов и алгоритмов. SSL/TLS протоколы должны быть правильно настроены, чтобы минимизировать риски уязвимостей и атак, таких как Padding Oracle, Man-in-the-Middle (MitM) и др. Чек-лист подробно описывает, какие версии протоколов, шифросистемы и дополнительные функции безопасности должны быть включены или исключены.

Пример (Example)

Ваш текущий конфигурационный файл для SSL/TLS содержит многие из нужных элементов, но требует корректировки. Давайте разберем его и внесем изменения шаг за шагом:

  1. Версии TLS:

    • Чек-лист BSI указывает на необходимость использования только TLS 1.2 и TLS 1.3. Это правильно учтено в вашей конфигурации: SSLProtocol -all +TLSv1.2 +TLSv1.3.
  2. Шифросистемы для TLS 1.3:

    • Вы правильно исключили шифросистему TLS_CHACHA20_POLY1305_SHA256. Оставьте:
      SSLCipherSuite TLSv1.3 TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
  3. Шифросистемы для TLS 1.2:

    • Здесь возникает ошибка, так как список шифросистем необходимо указать в отдельной директиве или вместе, но разделять версии:
      SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305

    Убедитесь, что все произведенные изменения для SSLCipherSuite применяются корректно через тесты и проверку конфигурации.

  4. Порядок шифросистем (SSLHonorCipherOrder):

    • Включено правильно, это заставляет сервер выбирать шифры из списка на основе собственного приоритета.
  5. Строгая проверка SNI (SSLStrictSNIVHostCheck):

    • Включение этой опции помогает избежать уязвимостей, связанных с неявным выбором неправильных виртуальных хостов.
  6. Отключение компрессии (SSLCompression):

    • Это основная рекомендация для предотвращения атаки BREACH.
  7. HSTS:

    • Настроено верно, обеспечивает дополнительный уровень защиты, подтверждая, что браузеры всегда используют HTTPS.
  8. Дополнительные заголовки безопасности:

    • Эти заголовки направлены на предотвращение разнообразных веб-атак и корректно включены.

Применение (Application)

Ваш конфигурационный файл должен протестироваться не только через онлайн-инструменты, но и через локальные тесты таких инструментов, как OpenSSL, который позволяет проверить соответствие вашей конфигурации чек-листу BSI:

openssl s_client -connect example.com:443 -tls1_3
openssl s_client -connect example.com:443 -tls1_2

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

Также, учитывая, что вы используете контейнер Docker, убедитесь, что используете последнюю версию Apache и OpenSSL, возможно, конфигурация хоста влияет на работу контейнера.

Внедрение данных изменений и тестирование их производительности позволят вам соответствовать критериям BSI и обеспечат безопасность вашим пользователям.

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

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