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

Uth*_*hra 3 ssl bouncycastle java-7 indexoutofboundsexception 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
Run Code Online (Sandbox Code Playgroud)

正如这里的解决方法所示,

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6521495,我曾尝试使用Bouncy Castle Provider,但仍然得到相同的例外.

任何帮助都会很棒.谢谢.

Far*_*han 6

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

1)将JDK版本升级到1.8

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

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

有关详细信息,请参阅此处