Java7和Java8之间的SSL不兼容性?

时间:2015-06-18 14:54:08

标签: java ssl

我们在java 7上运行服务器端进程: java -version: java版本" 1.7.0" Java(TM)SE运行时环境(版本1.7.0-b147) Java HotSpot(TM)64位服务器VM(版本21.0-b17,混合模式)

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

通常,无论客户端应用程序是在Java 6还是Java 7 JVM中运行,这都像梦一样。

但是,当使用Java 8(从MAC)启动相同的客户端应用程序时,我们遇到SSL问题,其中服务器断开连接(我们检查wireshark确认),但有以下异常: javax.net.ssl.SSLException:糟糕的记录MAC         at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)         at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1605)         在sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1573)         在sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:971)         at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:876)         at 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

MAC上的JVM版本: Java 8 Update 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,这个错误不会发生,一切正常。

让我知道哪些其他信息有助于找到此问题的原因/解决方案。

1 个答案:

答案 0 :(得分:0)

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

相关问题