如何使用 java 在 SSL 密码套件中使用 ChaCha 密码
How to use ChaCha cipher in SSL ciphersuite using java
我试图找到在 Java SSL 客户端中编辑支持的密码套件的方法,以便我可以提供特定的密码套件列表。
一个建议的解决方案是使用由@jww 在此link: Which Cipher Suites to enable for SSL Socket?
我确实添加了 SSLSocketFactoryEx class 和 运行 列出支持的密码的代码class(注意:我使用了 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
拜托,帮忙。
问题是 JSSE 实现(实现 Java TLS 支持)不支持 ChaCha20。 ChaCha20 实现现在可通过 JCE 提供程序获得并没有改变这一点。
这种密码类不能随便丢进去;密码对要使用的密钥、IV、填充等有特定要求。因此,您需要围绕密码编写代码,以便您的特定 TLS 实现支持它。
因此您需要等到它受支持(如果有的话)或使用支持它的 JSSE(Java 安全套接字扩展,TLS)提供商。我猜它可能会在 1.3 最终确定后可用,因为它在 AEAD(已验证)密码上标准化,而 ChaCha20 + Poly 1305 将是一个非常快速的配置。
我试图找到在 Java SSL 客户端中编辑支持的密码套件的方法,以便我可以提供特定的密码套件列表。
一个建议的解决方案是使用由@jww 在此link: Which Cipher Suites to enable for SSL Socket?
我确实添加了 SSLSocketFactoryEx class 和 运行 列出支持的密码的代码class(注意:我使用了 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
拜托,帮忙。
问题是 JSSE 实现(实现 Java TLS 支持)不支持 ChaCha20。 ChaCha20 实现现在可通过 JCE 提供程序获得并没有改变这一点。
这种密码类不能随便丢进去;密码对要使用的密钥、IV、填充等有特定要求。因此,您需要围绕密码编写代码,以便您的特定 TLS 实现支持它。
因此您需要等到它受支持(如果有的话)或使用支持它的 JSSE(Java 安全套接字扩展,TLS)提供商。我猜它可能会在 1.3 最终确定后可用,因为它在 AEAD(已验证)密码上标准化,而 ChaCha20 + Poly 1305 将是一个非常快速的配置。