Получение "javax.net.ssl.SSLException: java.lang.ArrayIndexOutOfBoundsException" при подключении к сайту "https:"

Я пытаюсь подключиться к сайту "https://", который поддерживает протокол "TLSv1" и следующие комплекты шифров,

TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) DH 4096 бит
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) DH 4096 бит

используя Apache httpclient (платформа Java - JDK 1.7)

Он отлично работает в JDK1.8 (который поддерживает наборы шифров с параметрами DH> 1024 бит)

Но его ошибка в JDK 1.7 со следующим исключением:

main, handling exception: java.lang.ArrayIndexOutOfBoundsException: 64
%% Invalidated:  [Session-1, TLS_DHE_RSA_WITH_AES_128_CBC_SHA]
main, SEND TLSv1 ALERT:  fatal, description = internal_error
main, WRITE: TLSv1 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 01 00 02 02 50                               ......P
main, called closeSocket()
main, IOException in getSession():  javax.net.ssl.SSLException: java.lang.ArrayIndexOutOfBoundsException: 64

Как предложено в обходном пути здесь,

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6521495, я пытался использовать Bouncy Castle Provider, но все равно получал то же исключение.

Любая помощь будет отличной. Благодарю.

1 ответ

Решение

Проблема в том, что вы используете ключ DH 2048 с TLS v1, в то время как он совместим с TLS v1.2, поэтому вы можете решить его тремя способами:

1) Обновите версию JDK до 1.8

2) Отключить все шифры DHE с сервера

3) Используйте 1048 DH ключ на сервере

подробнее смотрите здесь

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