Вопрос или проблема
версия 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, необходимо внимательно проанализировать конфигурацию и сообщения об ошибках. Рассмотрим несколько шагов, которые могут помочь в решении этой проблемы.
Шаги по устранению неисправностей:
-
Проверка конфигурации
<Connector>
:
Убедитесь, что ваш конфиг дляConnector
выглядит следующим образом, с правильными атрибутами:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" defaultSSLHostConfigName="defaultConfig" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" />
-
Настройка
<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>
-
Проверка совместимости шифров:
Убедитесь, что выбранные вами шифры соответствуют требованиям FIPS. Возможно, следует протестировать соединение с использованием только одного шифра, чтобы оценить его работоспособность. -
Логи и отладка:
Для отладки SSL соединений используйте параметры:-Djavax.net.debug=ssl:keymanager:trustmanager
Это даст больше информации о процессе установки SSL-соединения.
-
Тестирование с другими инструментами:
Еслиcurl
продолжает выдавать ошибкуSSL_ERROR_SYSCALL
, попробуйте использовать другие инструменты для тестирования SSL-соединений, такие какopenssl
:openssl s_client -connect localhost:8443 -tls1_2 -cipher <набранный_шифр>
Это может дать больше информации о том, где происходит сбой.
-
Проверка сертификатов:
Убедитесь, что сертификаты корректны, и серверный сертификат подписан доверенным центром сертификации (CA). Соответствующие цепочки сертификатов также должны быть правильно настроены. -
Проверка флагов JVM:
Убедитесь, что все необходимые флаги JVM установлены. Например, использование Bouncy Castle в режиме FIPS может требовать дополнительных настроек. -
Временные параметры и конфигурация системы:
Убедитесь, что системные часы корректны и что в системе отсутствуют конфликты с сертификатами или библиотеками SSL.
Заключение:
Если после выполнения вышеуказанных шагов проблема сохраняется, возможно, стоит обратиться к документации по Tomcat или сообществу разработчиков, чтобы выявить дополнительные возможности конфигурации или известные проблемы с SSL в FIPS-режиме. Надеемся, что предоставленные рекомендации помогут в решении проблемы с соединением.