Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java在SSL密码套件中使用ChaCha密码_Java_Sockets_Ssl_Bouncycastle - Fatal编程技术网

如何使用java在SSL密码套件中使用ChaCha密码

如何使用java在SSL密码套件中使用ChaCha密码,java,sockets,ssl,bouncycastle,Java,Sockets,Ssl,Bouncycastle,我试图找到在JavaSSL客户机中编辑受支持的密码套件的方法,以便提供密码套件的特定列表 一个建议的解决方案是使用@jww在此链接中发布的SSLSocketFactoryEx类: 我添加了SSLSocketFactoryEx类,并运行列出该类支持的密码的代码(注意:我使用了GetCipherList();而不是getSupportedCipheSuites();因为第一个是我在SSLSocketFactoryEx中找到的)。代码是: import java.io.IOException; imp

我试图找到在JavaSSL客户机中编辑受支持的密码套件的方法,以便提供密码套件的特定列表

一个建议的解决方案是使用@jww在此链接中发布的SSLSocketFactoryEx类:

我添加了SSLSocketFactoryEx类,并运行列出该类支持的密码的代码(注意:我使用了GetCipherList();而不是getSupportedCipheSuites();因为第一个是我在SSLSocketFactoryEx中找到的)。代码是:

import java.io.IOException;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.util.Arrays;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class ListCiphers {

    public static void main(String[] args) throws UnknownHostException, IOException, KeyManagementException, NoSuchAlgorithmException
    {   
        Security.addProvider(new BouncyCastleProvider());

        //BC is the ID for the Bouncy Castle provider;
        if (Security.getProvider("BC") == null){
            System.out.println("Bouncy Castle provider is NOT available");
        }
        else{
            System.out.println("Bouncy Castle provider is available");
        }

        SSLSocketFactoryEx factory = new SSLSocketFactoryEx();
        String[] cipherSuites = factory.GetCipherList();
        System.out.println(Arrays.toString(cipherSuites));

    } //end main
}
我的代码得到Bouncy Castle(BC)提供商的支持,该提供商表示它支持规范中的ChaCha密码。见:

代码结果(支持的密码)为:

为什么我看不到查查密码的密码

如果您查看SSLSocketFactoryEx的代码,它包含几个带有ChaCha的密码套件

为什么我在使用BC provider后无法将它们放入受支持的密码套件列表中?如何将以下密码套件添加到受支持的密码套件列表中,以便将其包含在客户端hello消息中

ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
DHE_RSA_WITH_CHACHA20_POLY1305_SHA256

请提供帮助。

问题在于JSSE实现(实现Java TLS支持)不支持ChaCha20。ChaCha20实现现在可以通过JCE提供程序使用,这并不会改变这一点

这些类型的密码类不能直接插入;密码对于要使用的密钥、IV、填充等有特定的要求。因此,您需要围绕密码编写代码,以使其得到特定TLS实现的支持


因此,您需要等待它得到支持(如果有的话),或者使用支持它的JSSE(JavaSecureSocketExtensions,TLS)提供程序。我想它可能会在1.3最终版后可用,因为它在AEAD(认证)密码上实现了标准化,ChaCha20+Poly 1305将是一个非常快速的配置。

@jww:如果你能帮助plz.等待交付,或者帮助交付,BC没有SSL提供程序吗?@EJP仅在轻量级API中(
org.bouncycastle.
). 我认为它没有JSSE提供程序,这正是用户试图使用的。尽管如此,使用轻量级API还是有可能的。@Maarten Bodewes我不明白,从你的回答来看,我是否可以使用BC来实现我想要的?若否,原因为何?BC规范称其支持ChCha。你能帮助我使用另一种编程语言来添加/删除OpenSSL中支持的任何密码吗??python允许这样做吗?再说一遍:在通用API中支持单独的密码并不意味着TLS实现可以自动神奇地使用它。这将需要额外的编程。这适用于任何实现。这就像为一辆汽车找到一个随机的轮子,并期望它不需要修改就可以安装。如果是轻量级API,可能就是在那里实现的。
ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
DHE_RSA_WITH_CHACHA20_POLY1305_SHA256