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

以下代码列出了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之类的其他语言来实现我想要的,请帮助我。

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

请参阅为SSL套接字启用哪些密码套件? 并使用SSLSocketFactoryEx 。 它是Java的SSLSocketFactory替代品

如果您不想使用SSLSocketFactoryEx ,则翻录代码以查找密码套件的交集。

它控制协议和密码套件。 没有意外的惊喜,例如从SSLSocketFactory.getInstance("TLS");获取SSLv3套接字SSLSocketFactory.getInstance("TLS");

没有什么是可配置的,因此用户无法在脚下射击。 它也为TLS 1.3做好了准备

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

您无法直接在工厂编辑密码套件。

但是,您可以选择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);