我正在尝试连接到支持“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,但仍然得到同样的例外。
任何帮助都会很棒。感谢。
答案 0 :(得分:6)
问题是,你使用2048 DH密钥和TLS v1,而它与TLS v1.2兼容,所以你可以通过三种方式解决它:
1)将JDK版本升级到1.8
2)禁用服务器上的所有DHE密码
3)在服务器上使用1048 DH密钥
有关详细信息,请参阅here