Java SSL 服务器禁用弱椭圆曲线

标签 java security ssl server

这是我的 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/

相关文章:

PHP 的 openssl_sign 生成的签名与 SSCrypto 的签名不同

java - 不确定我是否应该搜索或排序我的 hashmap

java - com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:应为 BEGIN_ARRAY 但在第 1 行第 1258 列为 BEGIN_OBJECT

java - 防止广告多次触发

.net - 通过powershell在iis中限制IP地址和域

java - 如何安全地存储外部服务的凭据

ssl - VestaCP 错误代码 2

ssl - 如何使用jetty建立2路SSL认证连接

java - SSL 和 NIO 非阻塞套接字

java - 如何设置CAMERA权限才能通过常规测试?