Получение "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 ключ на сервере
подробнее смотрите здесь