Неудача SSL-соединения в Tomcat 10 в режиме FIPS

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

версия tomcat 10.1.19
Конфигурация подключения

port = 8443
protocol="org.apache.coyote.http11.Http11NioProtocol"
defaultSSLHostConfigName="defaultConfig"

Симптом: curl ждет около 20 секунд после шага
“TLSv1.2 (IN), TLS handshake, Server key exchange (12):”
аргумент --tls-max 1.2 был передан в curl

*   Попытка 127.0.0.1...
* TCP_NODELAY установлен
* Соединено с localhost (127.0.0.1) по порту 8443 (#0)
* ALPN, предлагая h2
* ALPN, предлагая http/1.1
* успешно установлены местоположения проверки сертификатов:
*   CAfile: /etc/ssl/infaca/ca-bundle.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS handshake, CERT verify (15):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL при подключении к localhost:8443
* Закрытие соединения 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL при подключении к localhost:8443

Журнал доступа Tomcat показывает
10.29.5.112 - - 2024-10-02 00:05:31.204 null -1 "-" 400 - 0 - 10.29.5.22 - "-" "-" null

где код ответа 400, протокол null, порт -1, строка http-запроса “-“, размер http-ответа “-” и время выполнения 0, последнее значение null – это имя потока рабочего процесса tomcat

В SSLHostConfig пытались ограничить шифры на совместимые с fips и ограничить протокол на tls 1.2, но это не дало никакого результата

<SSLHostConfig
          hostName="defaultConfig"
          certificateVerification="required"
          ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
          protocols="TLSv1.2"
          sessionCacheSize="10000"
          sessionTimeout="3630"
    >

Пробовали включить отладку java ssl с помощью -Djavax.net.debug=ssl, но это не выводит много информации.

Пробовали установить org.apache.catalina.level = FINE в свойствах журнала tomcat, но не получили полезной информации в журналах catalina

class path содержит /opt/java/zulu17.50.20-sa-jdk17.0.11-linux_x64-fips-bc/fips_libs
и командная строка включает -Dorg.bouncycastle.fips.approved_only=true

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

При возникновении проблем с SSL-соединением в Tomcat 10 (версия 10.1.19) в режиме FIPS, необходимо внимательно проанализировать конфигурацию и сообщения об ошибках. Рассмотрим несколько шагов, которые могут помочь в решении этой проблемы.

Шаги по устранению неисправностей:

  1. Проверка конфигурации <Connector>:
    Убедитесь, что ваш конфиг для Connector выглядит следующим образом, с правильными атрибутами:

    <Connector port="8443"
              protocol="org.apache.coyote.http11.Http11NioProtocol"
              defaultSSLHostConfigName="defaultConfig"
              maxThreads="150"
              SSLEnabled="true"
              scheme="https"
              secure="true" />
  2. Настройка <SSLHostConfig>:
    У вас уже есть некоторые установки в SSLHostConfig. Убедитесь, что они правильно настроены для работы в режиме FIPS:

    <SSLHostConfig hostName="defaultConfig"
                  certificateVerification="required"
                  ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
                           TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
                  protocols="TLSv1.2"
                  sessionCacheSize="10000"
                  sessionTimeout="3630">
       <Certificate certificateFile="path/to/your/certificate.crt"
                    certificateKeyFile="path/to/your/privatekey.key"
                    certificateChainFile="path/to/your/chainfile.pem" />
    </SSLHostConfig>
  3. Проверка совместимости шифров:
    Убедитесь, что выбранные вами шифры соответствуют требованиям FIPS. Возможно, следует протестировать соединение с использованием только одного шифра, чтобы оценить его работоспособность.

  4. Логи и отладка:
    Для отладки SSL соединений используйте параметры:

    -Djavax.net.debug=ssl:keymanager:trustmanager

    Это даст больше информации о процессе установки SSL-соединения.

  5. Тестирование с другими инструментами:
    Если curl продолжает выдавать ошибку SSL_ERROR_SYSCALL, попробуйте использовать другие инструменты для тестирования SSL-соединений, такие как openssl:

    openssl s_client -connect localhost:8443 -tls1_2 -cipher <набранный_шифр>

    Это может дать больше информации о том, где происходит сбой.

  6. Проверка сертификатов:
    Убедитесь, что сертификаты корректны, и серверный сертификат подписан доверенным центром сертификации (CA). Соответствующие цепочки сертификатов также должны быть правильно настроены.

  7. Проверка флагов JVM:
    Убедитесь, что все необходимые флаги JVM установлены. Например, использование Bouncy Castle в режиме FIPS может требовать дополнительных настроек.

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

Заключение:

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

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

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