我想知道JDK 1.8是否支持DH密钥长度为4096位.
在我搜索过的每个地方,我发现jdk.tls.ephemeralDHKeySize只能接受1024到2048位之间.
我必须连接到支持的站点
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x9e)DH 4096位(p:512,g:1,Ys:512)".
但我得到了
"无法生成DH密钥对"例外.
编辑:
添加一点额外信息,
我使用Apache httpclient-4.2.5连接到该站点.服务器也支持
"TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x9f) - 4096位".
当我使用JDK 1.8并尝试连接时,服务器正在选择密码套件,但JDK 1.8仅支持2048位,并且我的连接失败.
编辑:
Bouncy castle可用作支持4096位的变通方法. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6521495
我正在尝试连接到支持"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,但仍然得到相同的例外.
任何帮助都会很棒.谢谢.
ssl bouncycastle java-7 indexoutofboundsexception sslexception