2014-01-22 25 views
7

根據Java 7的文件以及第三方供應商,它出現的Java 7應該支持AES-GCM套房:對SSL/TLS中AES-GCM的Java 7支持?

  1. ibm java 7
  2. java 7 ssl doc

我打了一些錯誤,在談判之間客戶端和服務器由於僅限於AES-GCM密碼而無法協商密碼。經過調查,我發現似乎密碼套件不支持客戶端和服務器(tomcat實例)。在客戶端上輸出一些示例代碼以獲得輸出:

// Create an SSLContext that uses our TrustManager 
SSLContext context = SSLContext.getInstance("TLS"); 
context.init(null, trustAllCerts, new SecureRandom()); 

SSLParameters params = context.getSupportedSSLParameters(); 
String[] suites = params.getCipherSuites(); 
System.out.println("Java version : " + System.getProperty("java.runtime.version")); 
System.out.println("Connecting with " + suites.length + " cipher suites supported:"); 

for (int i = 0; i < suites.length; i++) { 
    System.out.println(); 
    System.out.print(" ********* "); 
    System.out.print(suites[i]); 
    System.out.print(" ********* "); 
} 

Java version: 1.7.0_51-b13 
Connecting with 63 cipher suites supported: 

********* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 ********* 
********* 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_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 ********* 
********* 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 ********* 
********* SSL_RSA_WITH_RC4_128_MD5 ********* 
********* TLS_EMPTY_RENEGOTIATION_INFO_SCSV ********* 
********* TLS_DH_anon_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDH_anon_WITH_AES_128_CBC_SHA ********* 
********* TLS_DH_anon_WITH_AES_128_CBC_SHA ********* 
********* TLS_ECDH_anon_WITH_RC4_128_SHA ********* 
********* SSL_DH_anon_WITH_RC4_128_MD5 ********* 
********* TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA ********* 
********* SSL_DH_anon_WITH_3DES_EDE_CBC_SHA ********* 
********* TLS_RSA_WITH_NULL_SHA256 ********* 
********* TLS_ECDHE_ECDSA_WITH_NULL_SHA ********* 
********* TLS_ECDHE_RSA_WITH_NULL_SHA ********* 
********* SSL_RSA_WITH_NULL_SHA ********* 
********* TLS_ECDH_ECDSA_WITH_NULL_SHA ********* 
********* TLS_ECDH_RSA_WITH_NULL_SHA ********* 
********* TLS_ECDH_anon_WITH_NULL_SHA ********* 
********* SSL_RSA_WITH_NULL_MD5 ********* 
********* SSL_RSA_WITH_DES_CBC_SHA ********* 
********* SSL_DHE_RSA_WITH_DES_CBC_SHA ********* 
********* SSL_DHE_DSS_WITH_DES_CBC_SHA ********* 
********* SSL_DH_anon_WITH_DES_CBC_SHA ********* 
********* SSL_RSA_EXPORT_WITH_RC4_40_MD5 ********* 
********* SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 ********* 
********* SSL_RSA_EXPORT_WITH_DES40_CBC_SHA ********* 
********* SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA ********* 
********* SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA ********* 
********* SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA ********* 
********* TLS_KRB5_WITH_RC4_128_SHA ********* 
********* TLS_KRB5_WITH_RC4_128_MD5 ********* 
********* TLS_KRB5_WITH_3DES_EDE_CBC_SHA ********* 
********* TLS_KRB5_WITH_3DES_EDE_CBC_MD5 ********* 
********* TLS_KRB5_WITH_DES_CBC_SHA ********* 
********* TLS_KRB5_WITH_DES_CBC_MD5 ********* 
********* TLS_KRB5_EXPORT_WITH_RC4_40_SHA ********* 
********* TLS_KRB5_EXPORT_WITH_RC4_40_MD5 ********* 
********* TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA ********* 
********* TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 ********* INFO - Received response from post device of : 

不知道其他人是否遇到過這樣的問題。

Java 7是否支持在SSL/TLS中使用AES-GCM?

回答

-1

AES-GCM以TLS v1.2提供。見The Transport Layer Security (TLS) Protocol Version 1.2,第6.2.3.3節。 TLSv1.1沒有添加任何密碼套件,並且TLSv1.0從來沒有AES-GCM或橢圓曲線齒輪。 (橢圓曲線的東西也出現在TLSv1.2中)。

據我所知,Java 7不支持該協議。從Java Secure Socket Extension (JSSE) Reference Guide(下JDK8文檔):

的JSSE API能夠支持SSL版本2.0和3.0和TLS 版本1.0。這些安全協議封裝了一個正常的雙向流套接字,並且JSSE API爲驗證,加密和完整性保護添加了透明支持 。 JDK附帶的JSSE 實現支持SSL 3.0和TLS 1.0。它 沒有實現SSL 2.0。

有趣的是,TLS_ECDHE_ECDSA_*密碼套件顯示在您的轉儲中,因爲它們是TLSv1.2密碼。

+1

JSSE參考指南的這一部分可能不是最新的,但本指南中多次引用了對Java 7和8中TLS 1.2的支持。 – Bruno

+0

感謝布魯諾。我只能按照供應商的說法進行操作。 – jww

+0

我想他們還沒有碰過一段時間的介紹。如果您在整個文檔中搜索「1.2」,則會提及幾次。當然,真正重要的是指南末尾的附錄A中的「Oracle提供商文檔」的鏈接(它不一定是脫穎而出的......) – Bruno

11

儘管它支持TLS 1.2,但在SunJSSE Provider of Java 7(假定Oracle JRE)中沒有GCM密碼套件。

這些已被introduced in Java 8(參見「The SunJSSE Provider」部分中的密碼套件表)。

1.8.0-ea-b124  
Connecting with 71 cipher suites supported: 

********* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 ********* 
********* 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_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 ********* 
********* TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ********* 
********* TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ********* 
********* TLS_RSA_WITH_AES_128_GCM_SHA256 ********* 
********* TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 ********* 
********* TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 ********* 
********* TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 ********* 
********* TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 ********* 
********* 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 ********* 
********* SSL_RSA_WITH_RC4_128_MD5 ********* 
********* TLS_EMPTY_RENEGOTIATION_INFO_SCSV ********* 
********* TLS_DH_anon_WITH_AES_128_GCM_SHA256 ********* 
********* TLS_DH_anon_WITH_AES_128_CBC_SHA256 ********* 
********* TLS_ECDH_anon_WITH_AES_128_CBC_SHA ********* 
********* TLS_DH_anon_WITH_AES_128_CBC_SHA ********* 
********* TLS_ECDH_anon_WITH_RC4_128_SHA ********* 
********* SSL_DH_anon_WITH_RC4_128_MD5 ********* 
********* TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA ********* 
********* SSL_DH_anon_WITH_3DES_EDE_CBC_SHA ********* 
********* TLS_RSA_WITH_NULL_SHA256 ********* 
********* TLS_ECDHE_ECDSA_WITH_NULL_SHA ********* 
********* TLS_ECDHE_RSA_WITH_NULL_SHA ********* 
********* SSL_RSA_WITH_NULL_SHA ********* 
********* TLS_ECDH_ECDSA_WITH_NULL_SHA ********* 
********* TLS_ECDH_RSA_WITH_NULL_SHA ********* 
********* TLS_ECDH_anon_WITH_NULL_SHA ********* 
********* SSL_RSA_WITH_NULL_MD5 ********* 
********* SSL_RSA_WITH_DES_CBC_SHA ********* 
********* SSL_DHE_RSA_WITH_DES_CBC_SHA ********* 
********* SSL_DHE_DSS_WITH_DES_CBC_SHA ********* 
********* SSL_DH_anon_WITH_DES_CBC_SHA ********* 
********* SSL_RSA_EXPORT_WITH_RC4_40_MD5 ********* 
********* SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 ********* 
********* SSL_RSA_EXPORT_WITH_DES40_CBC_SHA ********* 
********* SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA ********* 
********* SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA ********* 
********* SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA ********* 
********* TLS_KRB5_WITH_RC4_128_SHA ********* 
********* TLS_KRB5_WITH_RC4_128_MD5 ********* 
********* TLS_KRB5_WITH_3DES_EDE_CBC_SHA ********* 
********* TLS_KRB5_WITH_3DES_EDE_CBC_MD5 ********* 
********* TLS_KRB5_WITH_DES_CBC_SHA ********* 
********* TLS_KRB5_WITH_DES_CBC_MD5 ********* 
********* TLS_KRB5_EXPORT_WITH_RC4_40_SHA ********* 
********* TLS_KRB5_EXPORT_WITH_RC4_40_MD5 ********* 
********* TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA ********* 
********* TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 ********* 
+2

新的Java 8文檔和密碼套件客戶端列表從表面出現具有新的AES-GCM密碼。該文檔還清除了我在客戶端/服務器端TLS 1.2支持(特別是對於Java 7)中看到的一些混淆,因爲我無法弄清楚爲什麼Java 7嘗試啓用TLSv1.2客戶端失敗,但似乎可以正常工作方好。在獲取這些文檔以及在哪裏查看它們之後現在有意義。 – user2403018

1

我最近一直在討論Java和這個密碼套件廢話相當近一點。

根據我的經驗,你需要無限的政策文件來獲得一些額外的套房。如果使用那些會讓你獲得GCM密碼的話,我記不起那些頭腦,但是從我回憶起IBM Java的時候,它至少讓我獲得了AES256位密碼。

link表明,你至少可以初始化的SSLContext中與TLSv1.2工作(所以你應該能夠ATLEAST支持所有的TLSv1.2工作密碼套件不需要無限jurisditcion策略文件)

有在我的oracle密碼套件列表中看不到任何GCM密碼之前,我已經查看了一些鏈接。 orace-enabled/supported-cipher-suites

希望這些鏈接中的一些可以幫助你!

(我打字一邊跑出來工作所以請原諒我,如果我錯過了任何GCM密碼:))

0

正如有人說的Java 1.7不支持該密碼,但如果您有可能調整您的Java安裝,則可以添加安全提供程序。 下面的步驟:

  1. 從bouncycastle.org bcprov-EXT-jdk15on-159.jar和bctls-jdk15on-159.jar下載,並把再進你的JRE/JDK的lib/ext目錄(159現在最新的版本)
  2. 編輯你的JRE/JDK的文件lib/security中/ java.security,把下面幾行:
    • security.provider.1 = org.bouncycastle.jce.provider.BouncyCastleProvider -security.provider.2 = org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
  3. 通過加入1(因此security.provider.1 = sun.security.provider.Sun變得security.provider.3 = sun.security.provider.Sun)

這是所有renumerate以下所有的安全提供,它現在應該可以工作