2012-04-05 40 views
1

從IBM JDK 6.0SR9更新到6.0SR10後,我不斷收到(在服務器端):客戶端請求的協議的SSLv3未啓用或不支持(IBM JDK 6.0SR10)

java.io.IOException: javax.net.ssl.SSLHandshakeException: Client requested protocol SSLv3 not enabled or not supported 
       at com.ibm.jsse2.kb.z(kb.java:107) 
       at com.ibm.jsse2.SSLEngineImpl.b(SSLEngineImpl.java:4) 
       at com.ibm.jsse2.SSLEngineImpl.c(SSLEngineImpl.java:224) 
       at com.ibm.jsse2.SSLEngineImpl.wrap(SSLEngineImpl.java:377) 
       at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:6) 

安全的無設置已修改。任何想法我怎麼能(重新)啓用SSLv3?

謝謝。

+0

另外,看一下這裏:http://stackoverflow.com/questions/28236091/how-to- enable-ssl-3-in-java – iAmcR 2017-02-22 16:52:18

回答

0

SSLEngine.setEnabledProtocols(),但SSLv3應該默認啓用。我會仔細檢查你的斷言,說它沒有被禁用。

+0

雙重檢查。實際上,我現在可以通過簡單地在舊的和新的ibmjsseprovider2.jar之間切換來重現問題。其他一切(conf,依賴庫)保持不變。通過明確地將SSL協議設置爲SSL_TLS/SSL_TLSv2,我可以恢復舊功能。那麼,它的默認值實際上是否改變了? – heeboir 2012-04-06 14:40:03

+0

下面是IBM在這個版本中報告的新內容:https://www.ibm.com/developerworks/java/jdk/security/60/secguides/jsse2Docs/JSSE2RefGuide.html#JSSE2RefGuide__WhatsNew – heeboir 2012-04-06 14:46:11

+1

@heeboir它在那裏指出'IBM實現支持以下協議:SSL,SSLv3,TLS,TLSv1和SSL_TLS,用於引擎類SSLContext或SSLSocket或SSLServerSocket類中的API setEnabledProtocols,'但還'在FIPS模式下不允許SSLv3協議'。你在FIPS模式? – EJP 2012-04-09 05:38:41

1

在更高版本中,出於安全原因,SSLv3默認處於禁用狀態。

以下技術說明應詳細說明如何啓用此功能。

http://www-01.ibm.com/support/docview.wss?uid=swg21318567

+0

你有沒有關於SSLv3被禁用的鏈接?該技術說明建議如何啓用SSL和TLS,但我看不到SSLv3被禁用的位置(除非在EJP所述的FIPS模式下)。 – Bruno 2012-05-10 11:47:49

1

的異常時,客戶端和服務器的SSL協議設置不匹配發生。

以下客戶端的示例代碼可與服務器側配置支承TLSv1.2工作協議:

String response = ""; 

URL url = new URL("https://localhost:9043/myservlet); 

final SSLContext ctx = SSLContext.getInstance("TLSv1.2"); 
ctx.init(null, null, null); 
// final String protoccol = ctx.getProtocol(); 

HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); 

final HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 

conn.setReadTimeout(15000); 
conn.setConnectTimeout(15000); 
conn.setRequestMethod("POST"); 
conn.setDoInput(true); 
conn.setDoOutput(true); 

final OutputStream os = conn.getOutputStream(); 
final BufferedWriter writer = 
    new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 

writer.write(......); 

writer.flush(); 
writer.close(); 
os.close(); 

final int responseCode = conn.getResponseCode(); 

if (responseCode == HttpsURLConnection.HTTP_OK) { 
    String line; 
    final BufferedReader br = 
    new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    while ((line = br.readLine()) != null) { 
    response += line; 
    } 
} 

System.out.println("response: " + response); 
相關問題