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

时间:2016-01-12 10:07:41

标签: ssl java-7 indexoutofboundsexception bouncycastle sslexception

我正在尝试连接到支持“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,但仍然得到同样的例外。

任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分:6)

问题是,你使用2048 DH密钥和TLS v1,而它与TLS v1.2兼容,所以你可以通过三种方式解决它:

1)将JDK版本升级到1.8

2)禁用服务器上的所有DHE密码

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

有关详细信息,请参阅here