當(dāng)我與一些IRC服務(wù)器(但不是其他服務(wù)器-大概是由于服務(wù)器的首選加密方法)建立SSL連接時,我會得到以下異常:Caused by: java.lang.RuntimeException: Could not generate DH keypair
at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:106)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:556)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
... 3 more最終原因:Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..)
at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:100)
... 10 more演示此問題的服務(wù)器示例是aperture.esper.net:6697(這是一個IRC服務(wù)器)。沒有演示問題的服務(wù)器示例是kornblth.freenode.net:6697。[毫不奇怪,每個網(wǎng)絡(luò)上的所有服務(wù)器都有相同的行為。]我的代碼(正如前面提到的,在連接到某些SSL服務(wù)器時確實有效)是: SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new SecureRandom());
s = (SSLSocket)sslContext.getSocketFactory().createSocket();
s.connect(new InetSocketAddress(host, port), timeout);
s.setSoTimeout(0);
((SSLSocket)s).startHandshake();拋出異常的是最后一次啟動手搖。是的,‘TrustAllCerts’有一些神奇之處;該代碼迫使SSL系統(tǒng)不驗證證書。(所以.沒有證書問題。)顯然,有一種可能是Esper的服務(wù)器配置錯誤,但是我搜索了Esper的SSL端口有問題的人的任何其他引用,并且“OpenSSL”連接到它(見下文)。因此,我想知道這是否是Java默認(rèn)SSL支持的限制,還是別的什么。有什么建議嗎?如前所述,在所有這些之后,它確實成功地連接了起來,這比你對我的Java應(yīng)用所能說的更多。如果相關(guān),我使用的是OSX10.6.8,Java版本1.6.0_26。為什么SSL握手會導(dǎo)致“不能生成DH鍵盤”異常?
3 回答

手掌心
TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊
更新
添加回答
舉報
0/150
提交
取消