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

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

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

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

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

Send a quick confirmation to the server verifying that we know the private key corresponding to the client certificate we just sent...

* CertificateVerify

[write] Хеши MD5 и SHA1: len = 262

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

main, WRITE: TLSv1 Handshake, длина = 262

[Необработанная запись]: длина = 267

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

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

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

[Необработанная запись]: длина = 6

0000: 14 03 01 00 01 01

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

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

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

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

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

[write] Хеши 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 .....m].!p'..#..

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

main, WRITE: TLSv1 Handshake, длина = 48

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

[Необработанная запись]: длина = 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

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

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

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

%% Недействительно: [Сессия-1, TLS_RSA_WITH_AES_128_CBC_SHA]

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

Открытый текст с заполнением перед ШИФРОВАНИЕМ: len = 32

0000: 02 28 BC 65 1A CA 68 87 79 84 5F 64 16 F5 28 72 .(.e..h.y._d..(r

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

main, WRITE: TLSv1 Alert, длина = 32

[Необработанная запись]: длина = 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)

I have no idea on what might be the cause for such a failure and how to programmatically influence the outcome of this step in the process. I’ve tried force the use of other ciphers recognized by both client and server such as SSL_RSA_WITH_RC4_128_MD5 but the error remain. Any thoughts on how to solve this problem?


person Jose Silva    schedule 15.01.2013    source источник
comment
Сервер не «ответил с ошибкой EOFException». Сервер закрыл соединение, в результате чего клиент получил EOFException.   -  person user207421    schedule 22.10.2016


Ответы (1)


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

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

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

person Stephen C    schedule 15.01.2013
comment
Спасибо за Ваш ответ. Я уже пытаюсь получить некоторую помощь от ИТ-специалистов налоговой администрации. - person Jose Silva; 15.01.2013
comment
Удачи. FWIW - настоящий эксперт по SSL может перечислить возможные причины, по которым сервер может разорвать соединение в этот момент. Но журналы удаленного сервера (надеюсь) должны определить реальную причину. - person Stephen C; 16.01.2013
comment
Я столкнулся с аналогичным исключением ... какие-либо обновления, если это решено? - person vegeta; 13.07.2015