连接到 "https:" 站点时收到 "javax.net.ssl.SSLException: java.lang.ArrayIndexOutOfBoundsException"

Receiving "javax.net.ssl.SSLException: java.lang.ArrayIndexOutOfBoundsException" while connecting to "https:" site

我正在尝试连接到支持 "TLSv1" 协议和以下密码套件的 "https://" 站点,

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,但仍然遇到相同的异常。

任何帮助都会很棒。谢谢

问题是,您使用的是带有 TLS v1 的 2048 DH 密钥,而它与 TLS v1.2 兼容,因此您可以通过三种方式解决它:

1) 将您的 JDK 版本升级到 1.8

2) 从服务器

禁用所有 DHE 密码

3) 在服务器上使用 1048 DH 密钥

有关详细信息,请参阅 here