2015-06-18 65 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版本似乎解決了這個問題。

相關問題