Я пишу программу на 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 из заголовка) * strong >
[Необработанная запись]: длина = 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?
EOFException
». Сервер закрыл соединение, в результате чего клиент получилEOFException
. - person user207421   schedule 22.10.2016