如何使用Bouncy Castle编辑Java中的密码套件列表

时间:2015-06-04 09:33:15

标签: java ssl cryptography bouncycastle

以下代码列出了Java SE 8支持的密码套件:

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客户端中的密码套件列表。 Bouncy Castle有助于此吗?怎么样?请一步一步地告诉我。另外,如果您想通过使用python之类的其他语言来实现我想要的,也请帮助我。

2 个答案:

答案 0 :(得分:3)

TLS_ECDHE_ECDSA_WITH_AES_256_SHA受Java 8(和7)支持而不添加BouncyCastle,默认情况下它在JSSE中启用,因此您无需“编辑”任何内容。 但所有 JRE不允许所有 256位对称加密(包括256位SSL / TLS密码套件),除非您安装“JCE Unlimited Strength Jurisdiction政策档案“; 请参阅底部附近“其他资源”下的http://www.oracle.com/technetwork/java/javase/downloads/index.html

答案 1 :(得分: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);