2012-04-05 489 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); 
相关问题