Ошибка SSL-связи в Tomcat 10 в режиме FIPSJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка SSL-связи в Tomcat 10 в режиме FIPS

Сообщение Anonymous »

tomcat версии 10.1.19
Конфигурация соединителя

Код: Выделить всё

port = 8443
protocol="org.apache.coyote.http11.Http11NioProtocol"
defaultSSLHostConfigName="defaultConfig"
Признак: Curl ожидает около 20 секунд после шага
"TLSv1.2 (IN), подтверждение TLS, обмен ключами сервера (12):"

Код: Выделить всё

--tls-max 1.2Аргумент 
был передан в Curl

Код: Выделить всё

*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   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 in connection to localhost:8443
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:8443
Показывает журнал доступа Tomcat

Код: Выделить всё

10.29.5.112 - - 2024-10-02 00:05:31.204 null -1 "-" 400 - 0 - 10.29.5.22 - "-" "-" null
где код ответа – 400, протокол – ноль, порт – 1, строка запроса http – "-", размер ответа HTTP – "-" и затраченное время равно 0. , последнее нулевое значение — имя рабочего потока tomcat.
В SSLHostConfig пробовал ограничить шифры до протокола, совместимого с fips, и ограничить протокол tls 1.2, но ничего не изменилось Пытался включить отладку Java SSL с помощью -Djavax.net.debug=ssl, но он не выводит много информации.
Пытался настроить org.apache.catalina.level = FINE в свойствах ведения журнала tomcat, но не получил полезной информации в журналах Catalina
путь к классу содержит /opt/java/zulu17.50.20- sa-jdk17.0.11-linux_x64-fips-bc/fips_libs
и командная строка включает -Dorg.bouncycastle.fips.approved_only=true
Обновление:
тайм-аут 20 секунд соответствует значению ConnectionTimeout, установленному в коннекторе https.
gnutls-util показывает, что SSL-квитирование завершено

Код: Выделить всё

[2024-10-04 00:01:45] - Description: (TLS1.3-X.509)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(AES-256-GCM)
[2024-10-04 00:01:45] - Options:
[2024-10-04 00:01:45] - Handshake was completed
Обновление 2:
gnutls-cli работает после предоставления строки HTTP-запроса через стандартный ввод.
Пытался использовать эквивалентный шифр с завитком, но закручивание по-прежнему завершается неудачей через 20 секунд.
р>

Код: Выделить всё

curl -vk https://localhost:12345/XXX/mgmtapi/version --ciphers 'ECDHE-RSA-AES256-GCM-SHA384'
Обновление 3:
Между запросом сертификата и его завершением проходит 20 секунд
[img]https: //i.sstatic.net/kZH8eWjb.png[/img]
К этому моменту истекает время ожидания соединения tomcat, и соединение закрывается.
Примечание. Этот дамп TCP был расшифрован с использованием метода переменной env SSLKEYLOGFILE
Обновление 4: дамп TCP из wget. Запрос выполняется примерно через 30 мс
Дамп TCP зашифрован
Изображение
Обновление 5:
strace в tomcat показывает задержку в 5 с (время ожидания соединения уменьшено с 20 до 5 с)

Код: Выделить всё

# grep '(15, ' strace_log_.2631*
strace_log_.2631293:21:30:00.659611 read(15, "\26\3\1\0\313\1\0\0\307\3\3i\n\364\234\234u\6B\3211\24\366\202\30_,\334a\356\235f"..., 16921) = 208 
strace_log_.2631293:21:30:00.671155 read(15, 0x7faff802b1e0, 18505) = -1 EAGAIN (Resource temporarily unavailable) 
strace_log_.2631293:21:30:00.673816 write(15, "\26\3\3\0]\2\0\0Y\3\3~KL\352\315*\207L\310\357\256\204qv\311\334\364ag\213\224"..., 17408) = 17408 
strace_log_.2631293:21:30:00.673963 read(15, 0x7faff8029be0, 18713) = -1 EAGAIN (Resource temporarily unavailable) 
strace_log_.2631294:21:30:05.762746 write(15, "Universal Root Certification Aut"..., 1915) = 1915 
strace_log_.2631294:21:30:05.768307 getsockopt(15, SOL_SOCKET, SO_LINGER, {l_onoff=0, l_linger=0}, [8]) = 0 
strace_log_.2631294:21:30:05.768970 shutdown(15, SHUT_WR)   = 0 
strace_log_.2631296:21:30:00.641739 fcntl(15, F_GETFL)      = 0x2 (flags O_RDWR) 
strace_log_.2631296:21:30:00.641834 getsockname(15, {sa_family=AF_INET6, sin6_port=htons(8443), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::ffff:127.0.0.1", &sin6_addr), sin6_scope_id=0}, [28]) = 0 
strace_log_.2631296:21:30:00.641931 getsockname(15, {sa_family=AF_INET6, sin6_port=htons(8443), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::ffff:127.0.0.1", &sin6_addr), sin6_scope_id=0}, [28]) = 0 
strace_log_.2631296:21:30:00.657494 fcntl(15, F_GETFL)      = 0x2 (flags O_RDWR) 
strace_log_.2631296:21:30:00.657543 fcntl(15, F_SETFL, O_RDWR|O_NONBLOCK) = 0 
strace_log_.2631296:21:30:00.657643 setsockopt(15, SOL_SOCKET, SO_RCVBUF, [32768], 4) = 0 
strace_log_.2631296:21:30:00.657712 setsockopt(15, SOL_SOCKET, SO_LINGER, {l_onoff=0, l_linger=0}, 8) = 0 
strace_log_.2631296:21:30:00.657765 setsockopt(15, SOL_TCP, TCP_NODELAY, [1], 4) = 0 
Похоже, здесь как-то связана фрагментация CA Cert

Подробнее здесь: https://stackoverflow.com/questions/790 ... -fips-mode
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»