2015-06-04 116 views
1

下面的代碼列出的Java SE 8支持的加密套件編輯在Java的密碼套件的列表:我如何使用充氣城堡

import java.io.IOException; 
import java.net.UnknownHostException; 
import java.util.Arrays; 

import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLSocketFactory; 
public class ListCiphers { 

    public static void main(String[] args) throws UnknownHostException, IOException 
    { 
     SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory(); 
     String[] cipherSuites = factory.getSupportedCipherSuites(); 
     System.out.println(Arrays.toString(cipherSuites)); 

    } //end main 
} 

我想讓它配置了一些具體名單SSL客戶端的密碼套件。該密碼套件我想使用的標準化的,但不是JVA SE 8。例如,該密碼是在Firefox中列出的支持:

ECDHE_ECDSA_WITH_AES_256_SHA 

請幫助我的任何方式,讓我編輯的密碼列表套件在我的SSL客戶端。充氣城堡在這方面有幫助嗎?怎麼樣?請給我清楚的一步一步。另外如果你知道我想要的東西可以通過使用另一種語言如python來實現,也請幫助我。

回答

1

我如何使用充氣城堡

Which Cipher Suites to enable for SSL Socket?和使用SSLSocketFactoryEx編輯的Java密碼套件的列表。它是Java的替代品SSLSocketFactory

如果你不想使用SSLSocketFactoryEx,那麼翻譯代碼以找到密碼套件的交集。

它控制協議和密碼套件。沒有意外的驚喜,例如從SSLSocketFactory.getInstance("TLS");獲得SSLv3套接字。

沒有什麼可配置的,所以用戶不能在腳中自我拍攝。它也準備好用於TLS 1.3

3

TLS_ECDHE_ECDSA_WITH_AES_256_SHA由Java 8(和7)支持而不添加BouncyCastle,並且默認情況下它已在JSSE中啓用,因此您不需要「編輯」任何內容。 但所有的JRE禁止所有256位對稱加密(包括256位SSL/TLS密碼套件),除非你安裝「JCE無限制強度仲裁策略文件」; 參見http://www.oracle.com/technetwork/java/javase/downloads/index.html在底部附近的「其他資源」下。

+0

感謝上。我做到了,現在可以在我的客戶端獲得AES_256支持。我剛纔提到'TLS_ECDHE_ECDSA_WITH_AES_256_SHA'就是一個例子,但還有其他的密碼不包括在內。直到現在我還沒有找到任何添加它們的方法。 – user2192774

1

您不能直接在工廠編輯密碼套件。

但是你可以選擇支持什麼確切的密碼(從可用)的SSLSocket

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory(); 
String[] cipherSuites = factory.getSupportedCipherSuites(); 
SSLSocket sslSocket = (SSLSocket) factory.createSocket(); 

// Choose the exact ciphers you need from the available 
String[] filteredCipherSuites = cipherSuites; 

sslSocket.setEnabledCipherSuites(filteredCipherSuites);