2017-06-05 27 views
0

我想提出一個SSL連接(如客戶端),並根據this Oracle article以下兩個暗號西服在JDK7的支持,如果你使用TLSv1.2工作,使轄區的版本強政策。JDK7 SSL conenction問題忽略不支持的加密算法套件:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

但是進行安全連接時這兩個暗號算法被忽略。

Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 
**Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384** 
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 
**Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256** 
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256 
Allow unsafe renegotiation: false 
Allow legacy hello messages: true 
Is initial handshake: true 
Is secure renegotiation: false 
%% No cached client session 
*** ClientHello, TLSv1.2 
RandomCookie: GMT: 1496192143 bytes = { 166, 200, 78, 178, 69, 10, 17, 174, 212, 142, 188, 108, 136, 152, 242, 222, 94, 231, 4, 86, 2, 99, 202, 4, 204, 130, 236, 120 } 
Session ID: {} 
Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 
Compression Methods: { 0 } 
Extension elliptic_curves, curve names: {secp256r1, sect163k1, sect163r2, secp192r1, secp224r1, sect233k1, sect233r1, sect283k1, sect283r1, secp384r1, sect409k1, sect409r1, secp521r1, sect571k1, sect571r1, secp160k1, secp160r1, secp160r2, sect163r1, secp192k1, sect193r1, sect193r2, secp224k1, sect239k1, secp256k1} 
Extension ec_point_formats, formats: [uncompressed] 
Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA, MD5withRSA 
Extension server_name, server_name: [host_name: api.sms.optus.com.au] 
*** 
main, WRITE: **TLSv1.2** Handshake, length = 222 
main, READ: TLSv1.2 Alert, length = 2 
main, RECV TLSv1 ALERT: fatal, handshake_failure 
main, called closeSocket() 
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 
ERROR [main] (TestRest.java:42) - Error : 

我已經設置了TLSv1.2工作

  • -Dhttps.protocols = TLSv1.2工作

我已經安裝了 「JCE無限制強度仲裁策略文件」 和我可以通過運行以下代碼確認其安裝成功:

try { 
    int maxAllowedKeyLength = Cipher.getMaxAllowedKeyLength("AES"); 
    System.out.println("AES: " + maxAllowedKeyLength); 
    return maxAllowedKeyLength >= 256; 
} catch (NoSuchAlgorithmException e) { 
    return false; 
} 

我認爲JDK7不支持兩種密碼算法,但在Oracle文章中錯誤地提到了這兩種算法?

注:

  • 沒有問題,如果我在跑的JDK8 c0ode。
  • 我在firewal後面,必須設置代理。但是我不認爲它的相關性,因爲我可以在JDK8中連接而沒有問題。
+0

去除有很多密碼套件。爲什麼這兩個特定的問題? – EJP

+0

@EJP不幸的是,主機只接受四個密碼套裝。其中兩個在JDK7中完全不受支持,另外兩個是我在帖子中提到的。 [checkhere](https://www.ssllabs.com/ssltest/analyze.html?d=api.sms.optus.com.au) – Reza

+1

嗯,我確認你的結果,在JDK中對我不起作用1.7.0_25,在1.8.0中。 – EJP

回答

1

的「啓用」密碼列表的初始設置計算在SSLContextImpl.init任何剪裁完成之前,在Java7客戶最初的協議列表僅僅是SSLv3和使用TLSv1(在最近的版本java.security配置jdk.tls.disabledAlgorithms到由於POODLE而刪除SSLv3),因此這將禁用所有僅用於TLSv1.2的密碼,這是該服務器將同意的唯一密碼。在實際握手開始之前,這是跟蹤中Ignoring unsupported消息的來源。

如果使用HttpsURLConnection需要設置https.protocolshttps.cipherSuites(注意大寫S)sysprops。如果直接使用SSLSocket,則需要調用.setEnabledProtocols(包括(至少))​​和.setEnabledCipherSuites(包括(至少))您在Q中突出顯示的一個密碼套件,或者替換/包裝工廠以執行等效。

Java8不會有問題,因爲客戶端和服務器的默認協議列表是SSLv3的,使用TLSv1,TLSv1.1,TLSv1.2工作,再次通過的SSLv3 jdk.tls.disabledAlgorithms

+0

我使用Spring Resttemplate並使用HttpsURLConnection來建立連接。只需將https.cipherSuites設置爲缺少密碼適合問題即可解決問題。感謝臀部。 – Reza

相關問題