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

用户名

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

一个建议的解决方案是使用@jww在此链接中发布SSLSocketFactoryEx类:哪些密码套件可启用SSL套接字?

我确实添加了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密码。请参阅:https//www.bouncycastle.org/specifications.html

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

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_EMPTY_RENEGOTIATION_INFO_SCSV

为什么我看不到带有ChaCha密码的密码?

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

使用BC提供程序后,为什么不能在受支持的密码套件列表中找到它们?如何在支持的密码套件列表中添加以下密码套件,以便可以将其包含在客户端问候消息中?

ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
DHE_RSA_WITH_CHACHA20_POLY1305_SHA256

请帮忙。

马丁·波德维斯(Maarten Bodewes)

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

不能仅将这类密码类放入其中。密码对要使用的密钥,IV,填充等有特定要求。因此,您需要围绕密码编写代码,以使其受特定的TLS实现支持。

因此,您需要等到受支持为止(如果有的话),或者使用支持该功能的JSSE(Java安全套接字扩展,TLS)提供程序。我猜想它可能会在1.3最终确定后成为可用,因为它已在AEAD(已认证)密码上进行了标准化,ChaCha20 + Poly 1305将是一个非常快速的配置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何指定在SSL会话中使用的密码套件

如何使用javax.net.ssl.SSLContext设置密码套件

如何获得HiveMQ Client中使用的密码套件?

SSLSocket使用的密码套件

如何确定使用某些密码套件可以建立哪个SSL / TLS协议版本

如何使用Botan库和特定的密码套件加密数据?

使用自定义X509KeyManager时,Java无法为SSL握手确定匹配的密码套件

如何在Java中使用带密码的RSA密钥

Java-如何存储应用程序中使用的密码?

如何在Java中使用选项生成随机密码?

DocuSign是否使用最新的TLS密码套件?

连接使用过时的密码套件加密

如何在Java客户端中使用用户名和密码(无SSL)连接到Elasticsearch?

如何在GnuPG中使用长密码?

如何列出特定网站提供的SSL / TLS密码套件?

使用Java验证密码

如何在HiveMQ中正确使用TLS 1.3密码套件?(获取SSL异常:在接收对等方的close_notify之前关闭入站)

在VNC中使用更长的密码?

在密码哈希中使用microtime()

在shell脚本中使用密码

SSH:如何仅使用密码连接密码?

如何使用Java在SOAP UI中使用用户名和密码发送SOAP请求

如何使用 terraform 为 Azure 应用程序网关设置密码套件

如何使用JBOSS配置摆脱Google Chrome中过时的密码套件问题

如何配置libssl以使用TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256密码套件?

使用 Openssl s_server 限制密码套件选择

使用Passware套件进行分布式密码恢复

如何在Java中使用SHA-512对密码进行哈希处理?

我将如何在 golang 中使用 java 中的 AES/CCM/NoPadding 密码?