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

How can I edit the list of cipher suite in Java using Bouncy Castle

以下代码列出了 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 客户端中的密码套件列表。充气城堡对此有帮助吗?如何?请一步一步给我讲清楚。另外,如果您知道我想要的可以通过使用其他语言(例如 python)来实现,也请帮助我。

How can I edit the list of cipher suite in Java using Bouncy Castle

Which Cipher Suites to enable for SSL Socket? and use SSLSocketFactoryEx. Its a drop-in replacement for Java's SSLSocketFactory

如果你不想用SSLSocketFactoryEx,那就撕开密码找密码组的交集。

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

取回 SSLv3 套接字

没有什么是可配置的,所以用户不能搬起石头砸自己的脚。它也已准备好用于 TLS 1.3

TLS_ECDHE_ECDSA_WITH_AES_256_SHA 由 Java 8(和 7)支持,无需添加 BouncyCastle,它在 JSSE 中默认启用,因此您不需要 "edit" 任何东西。 但是 all JRE 不允许 all 256 位 对称加密(包括 256 位 SSL/TLS ciphersuites) 除非你安装 "JCE Unlimited Strength Jurisdiction Policy Files"; 请参阅底部附近 "Additional Resources" 下的 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);