2012-02-06 63 views
7

我試圖實現一個非常簡單的SSL客戶端發送一個HTTPS POST請求到服務器,我跑到這看似無害的例外。 JSSE參考指南尚未使用。非常感謝。Java SSL異常 - 「總理大小必須是64的倍數...」

SSLContext ctx = SSLContext.getInstance("SSL"); 
// Accept-all trust manager 
TrustManager[] trustEverything = { new DefaultTrustManager() };  

// Keystore file in local directory 
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
ks.load(new java.io.FileInputStream("keystore"),"123456".toCharArray()); 

// Key manager 
KeyManager[] managers; 
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); 
kmf.init(ks, "123456".toCharArray()); 
managers = kmf.getKeyManagers(); 

ctx.init(managers, trustEverything, new SecureRandom()); 
SSLSocketFactory sslFact = (SSLSocketFactory) ctx.getSocketFactory(); 
// Connect to internal SSL-enabled server 
SSLSocket socket = (SSLSocket) sslFact.createSocket("10.131.149.36", 8443); 

的例外,當我試圖握手拋出:

socket.startHandshake(); 

我試圖尋找到這些參數進行初始化無濟於事。請讓我感到無聊。

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(DHKeyPairGenerator.java:120) 
at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:658) 
at sun.security.ssl.DHCrypt.<init>(DHCrypt.java:117) 
+0

好像這已經回答了:http://stackoverflow.com/questions/6851461/java-why-does-ssl-handshake -give-could-not-generate-dh-keypair-exception – Eugene 2012-02-06 15:19:21

+0

你是否檢查過這個問題http://stackoverflow.com/questions/4764611/java-security-invalidalgorithmparameterexception-the-trustanchors-parameter-mus它似乎當keystore是空,你可能會得到這個錯誤。 – kosa 2012-02-06 15:21:39

+1

我用擴展的JCE策略替換了我的JRE中的fils;仍然沒有去。 @thinksteep:在這種情況下,它不會在密鑰庫加載時拋出異常嗎? 謝謝。 – user1192564 2012-02-06 15:45:30

回答

相關問題