2015-06-18 67 views
0

我们对Java 7的运行服务器端程序: Java的版本: Java版本 “1.7.0” 的Java(TM)SE运行时环境(建立1.7.0-B147) Java的热点(TM )64位服务器VM(构建21.0-b17,混合模式)Java7和Java8之间的SSL不兼容?

它接受来自我们自己开发的java应用程序(通过正确签名的JNLP启动)的SSL连接。

通常情况下,无论客户端应用程序是在Java 6或Java 7 JVM中运行,它都可以像梦一样运行。

但是,使用Java 8(从MAC)启动相同的客户端应用程序时,我们遇到SSL问题,服务器断开连接(我们使用wireshark进行检查以确认),但存在以下例外: javax。 net.ssl.SSLException:bad record MAC at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1605) at sun.security .ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1573) 在sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:971) 在sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:876) 在sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java: 750) 在javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)

...

在此基础上,该错误是特别含糊... https://security.stackexchange.com/questions/39844/getting-ssl-alert-write-fatal-bad-record-mac-during-openssl-handshake

JVM在MAC版本: 的Java 8更新45

事情我已经尝试:

SSLEngine engine = getSslContext().createSSLEngine(); String[] avail = engine.getSupportedCipherSuites(); Set availableCiphers = new HashSet(Arrays.asList(avail)); availableCiphers.retainAll(GOOD_CIPHERS); engine.setEnabledCipherSuites(this.availableCiphers.toArray(new String[this.availableCiphers.size()]));

  • 令人惊讶地,在运行服务器进程时局部地使用 jdk1.6.0_20,该错误不会发生,一切正常。

让我知道什么额外的信息将有助于找到这个问题的原因/解决方案。

回答

0

将服务器的JDK升级到最新的java7版本似乎解决了这个问题。

相关问题