Ошибка EOFException при установлении соединения SSL

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

У меня возникает ошибка EOFException на этапе установления связи после того, как клиент и сервер согласились обмениваться данными с использованием согласованного набора шифров, который в данном случае является TLS_RSA_WITH_AES_128_CBC_SHA.

Следуя протоколу SSL, клиент успешно выполняет тест с использованием нового шифра и отправляет тестовые данные на сервер, чтобы сервер также мог повторить тот же тест и подтвердить, что он также способен шифровать и дешифровать данные. И в этот момент сервер отправляет EOFException.

Вот последняя часть журнала связи SSL:

Отправьте на сервер быстрое подтверждение, подтверждающее, что мы знаем закрытый ключ, соответствующий только что отправленному клиентскому сертификату...

* CertificateVerify

[запись] MD5 и SHA1 хэши: len = 262

двоичные данные здесь слишком велики, не отображаются

основной, НАПИШИТЕ: TLSv1 Рукопожатие, длина = 262

[Raw write]: длина = 267

двоичные данные здесь слишком велики, не отображаются

* Сообщите серверу, что мы переходим на недавно установленный набор шифров. Все дальнейшие сообщения будут зашифрованы с использованием только что установленных нами параметров. *

main, WRITE: TLSv1 Изменить спецификацию шифра, длина = 1

[Raw write]: длина = 6

0000: 14 03 01 00 01 01

... и заканчивается успешно

..Законченный

Мы отправляем зашифрованное сообщение Готово, чтобы убедиться, что все работает.

verify_data: {221, 96, 47, 110, 19, 170, 244, 8, 37, 152, 160, 40}

... клиент зашифровывает тестовые данные..

[запись] MD5 и SHA1 хэши: len = 16

0000: 14 00 00 0C DD 60 2F 6E 13 AA F4 08 25 98 A0 28..... `/ n....%.. (

Мягкий открытый текст перед шифрованием: len = 48

0000: 14 00 00 0C DD 60 2F 6E 13 AA F4 08 25 98 A0 28..... `/ n....%.. (

0010: 10 7F 85 11 EC 6D 5D ED 21 70 27 F4 DC 23 C0 9B..... м].! P '.. #..

0020: A7 6F C2 80 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B.o..............

основной, НАПИШИТЕ: TLSv1 Рукопожатие, длина = 48

*... и отправить тестовые данные на сервер, чтобы сервер мог выполнить тот же тест и подтвердить, что зашифрованная связь может быть установлена ​​(53 байта = 48 из тестовых данных + 5 из заголовка) *

[Raw write]: длина = 53

0000: 16 03 01 00 30 1C 17 08 0F 49 C9 6A 7A 8B 8C 48.... 0.... I.jz..H

0010: BA 57 2D CB 06 46 1E 65 61 7C 5F 74 F2 08 AB 12.W -.. F.ea._t....

0020: 91 47 72 8C 8F 84 0A CB D7 29 E2 FD 84 B2 FD 9E.Gr......)......

0030: 47 DC 13 60 B4 G..`.

... и сервер отвечает ошибкой EOFException

основное, полученное EOFException: ошибка

main, обработка исключения: javax.net.ssl.SSLHandshakeException: удаленный хост закрыт

соединение во время рукопожатия

%% Invalidated: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA]

main, ОТПРАВИТЬ TLSv1 ALERT: фатально, description = handshake_failure

Мягкий открытый текст перед шифрованием: len = 32

0000: 02 28 до н.э. 65 1A CA 68 87 79 84 5F 64 16 F5 28 72 .(. E..hy_d.. (r

0010: F7 8A 69 72 93 D8 09 09 09 09 09 09 09 09 09 09 09..ir............

основной, WRITE: TLSv1 Alert, длина = 32

[Raw write]: длина = 37

0000: 15 03 01 00 20 0D 9A 35 18 B7 98 4B 7B AF 82 4E......5... K... N

0010: 1A EE 7D AC 5D D5 49 05 4E 74 B9 77 E4 CD 87 61....]. I.Nt.w... a

0020: 23 03 5C 9C 7E #...

main, называется closeSocket ()

main, называется close ()

main, называется closeInternal(true)

Я понятия не имею, что может быть причиной такой неудачи и как программно повлиять на результат этого шага в процессе. Я попытался принудительно использовать другие шифры, распознаваемые как клиентом, так и сервером, такие как SSL_RSA_WITH_RC4_128_MD5, но ошибка осталась. Есть мысли о том, как решить эту проблему?

1 ответ

Есть мысли о том, как решить эту проблему?

Я предлагаю вам связаться с людьми, которые запускают эту службу, и попросить их просмотреть свои журналы, чтобы понять, почему их сервер закрывает соединение во время настройки SSL.

(Строго говоря, сервер не "отвечает с ошибкой [a] EOFException". Он фактически закрывает соединение TCP, и клиентские библиотеки Java выдают исключение. Вы, вероятно, получите более полезный ответ от сопровождающих услуга, если вы используете правильную терминологию.)

Другие вопросы по тегам