javax.net.ssl.SSLException:服务器选择了不正确的密码套件 SSL_RSA_WITH_DES_CBC_SHA

Posted

技术标签:

【中文标题】javax.net.ssl.SSLException:服务器选择了不正确的密码套件 SSL_RSA_WITH_DES_CBC_SHA【英文标题】:javax.net.ssl.SSLException: Server selected improper ciphersuite SSL_RSA_WITH_DES_CBC_SHA 【发布时间】:2013-07-17 04:59:02 【问题描述】:

当通过 HTTPS 连接提供小程序时,出现以下异常。

这个问题在 Java 1.7.0_25 中出现,但在 java 1.6 中没有。

当我查看 java (http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#PLUG) 支持的芯片套件时,我在列表中看到 SSL_RSA_WITH_DES_CBC_SHA。

有没有人遇到这个错误?以及我应该如何处理这个错误?

Java Plug-in 10.25.2.15
Using JRE version 1.7.0_25-b15 Java HotSpot(TM) 64-Bit Server VM
User home directory = /home/mithat
----------------------------------------------------
network: Cache entry not found [url: https://mytest.domain.tr/LoginWeb/myapplet.jar,     version: null]
network: Connecting https://mytest.domain.tr/LoginWeb/myapplet.jar with proxy=DIRECT
network: Connecting http://mytest.domain.tr:443/ with proxy=DIRECT
javax.net.ssl.SSLException: Server selected improper ciphersuite SSL_RSA_WITH_DES_CBC_SHA
   at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
   at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
   at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
   at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:266)
   at sun.security.ssl.ClientHandshaker.serverHello(ClientHandshaker.java:464)
   at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:143)
   at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
   at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
   at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
   at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
   at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
   at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
   at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:515)
   at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
   at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
   at sun.plugin.PluginURLJarFileCallBack.connect(Unknown Source)
   at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
   at sun.net.www.protocol.jar.URLJarFile.retrieve(URLJarFile.java:205)
   at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:71)
   at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:88)
   at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
network: Cache entry not found [url: https://mytest.domain.tr/LoginWeb/myapplet.jar, version: null]
...
network: Cache entry not found [url:   https://mytest.domain.tr/LoginWeb/test/AppletTest.class, version: null]
network: Connecting https://mytest.domain.tr/LoginWeb/test/AppletTest.class with proxy=DIRECT
network: Connecting http://mytest.domain.tr:443/ with proxy=DIRECT
java.lang.ClassNotFoundException: test.AppletTest
   at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
   at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
   at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
   at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
   at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
   at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
   at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
   at java.lang.Thread.run(Thread.java:724)
   ...
security: Reset deny session certificate store
basic: Dialog type is not candidate for embedding

【问题讨论】:

我们在 Cisco 网络设备上使用 SSL 加速器模块来建立 SSL 连接。之后,该网络设备使用 HTTP 协议与 Web 服务器(Ibm Http Server)对话以处理请求。如果我将 HTTP 服务器配置为通过 https 提供服务并删除 cisco 设备,则 java 1.7 不会发生错误。我很困惑是java还是cisco引起的问题? 【参考方案1】:

问题很可能与反向代理设置有关。例如,在 apache 中,您必须设置以下参数。

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

您可以为其他反向代理服务器找到类似的选项。

【讨论】:

感谢您的回答。我认为问题与代理设置无关,因为在 http 服务器上未启用 mod_proxy。实际上http服务器不知道请求来自客户端或cisco ssl模块。它只知道它说的是 HTTP 协议。【参考方案2】:

我们通过 Wireshark 检查了网络,我们发现服务器选择了提到的芯片套件,它实际上不在 client-hello 中并且在 Java8 中被禁用。更改网络设备的 SSL 模块后问题得到解决。您可以在 java here 中找到默认支持的芯片套件。

【讨论】:

以上是关于javax.net.ssl.SSLException:服务器选择了不正确的密码套件 SSL_RSA_WITH_DES_CBC_SHA的主要内容,如果未能解决你的问题,请参考以下文章