这是我的 Java ssl 服务器的代码。 ctx
是使用服务器 keystore 初始化的 SSLContext
。
public SSLEngine createSSLEngine() {
SSLEngine sslEngine = ctx.createSSLEngine();
String[] ciphersuites = new String[]{
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
};
sslEngine.setEnabledCipherSuites(ciphersuites);
sslEngine.setUseClientMode(false);
return sslEngine;
}
我用 cipherscan ( https://github.com/jvehent/cipherscan ) 测试了它,密码套件看起来不错,但服务器支持所有可能的椭圆曲线 (sect163k1, sect163r1, sect163r2, sect193r1, sect193r2, sect233k1, sect233r1, sect239k1, sect283k1, sect1,sect283r1, sect1,sect283r1) sect409r1、sect571k1、sect571r1、secp160k1、secp160r1、secp160r2、secp192k1、prime192v1、secp224k1、secp224r1、secp256k1、prime256v1、secp384r1、secp521r1)。
有没有办法禁用所有曲线,除了像 secp384r1 这样的强曲线?
最佳答案
从 Java8 u121 开始,可以配置要使用的椭圆曲线。
在程序的 VM 启动时使用参数,即:
-Djdk.tls.namedGroups="secp521r1, secp256r1, secp256k1"
或者,如果您想要 JDK/JRE 范围策略,请更改 java.security 文件并添加属性。即:
jdk.tls.namedGroups=secp521r1, secp256r1, secp256k1
作为引用,请参阅:http://www.oracle.com/technetwork/java/javase/8u121-relnotes-3315208.html “提高JDK中EC的默认强度”段落
关于Java SSL 服务器禁用弱椭圆曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635136/