【问题标题】:How can I edit the list of cipher suite in Java using Bouncy Castle如何使用 Bouncy Castle 编辑 Java 中的密码套件列表
【发布时间】:2015-06-04 09:33:14
【问题描述】:

以下代码列出了 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)来实现,也请帮助我。

【问题讨论】:

    标签: java ssl cryptography bouncycastle


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我做到了,现在可以在我的客户端中获得 AES_256 支持。我提到TLS_ECDHE_ECDSA_WITH_AES_256_SHA 只是作为一个例子,但还有其他密码不包括在内。直到此刻,我还没有找到任何添加它们的方法。
    【解决方案2】:

    您不能直接在工厂编辑密码套件。

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

    【讨论】:

      【解决方案3】:

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

      查看Which Cipher Suites to enable for SSL Socket? 并使用SSLSocketFactoryEx。它是 Java 的 SSLSocketFactory

      的直接替代品

      如果你不想使用SSLSocketFactoryEx,那就撕掉代码找到密码套件的交集。

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

      没有什么是可配置的,所以用户不能在脚上开枪。它也为 TLS 1.3 做好了准备

      【讨论】:

        猜你喜欢
        • 2015-12-11
        • 2017-04-30
        • 2011-01-26
        • 1970-01-01
        • 2020-09-01
        • 2019-05-24
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多