如何使用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);