java 在JDK17中设置椭圆曲线

gkn4icbw  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(254)

我把一个服务从JDK 8迁移到了JDK 17,现在客户端连接到服务器时,服务器端提供X448椭圆曲线,我想禁用它。

PFS is offered (OK)          ECDHE-RSA-AES128-GCM-SHA256
 Elliptic curves offered:     prime256v1 secp384r1 secp521r1 X25519 X448

以上输出来自testssl工具,该工具正在测试SSL。
我试着把JVMargs设置为-

System.setProperty("jdk.tls.namedGroups","prime256v1");
System.setProperty("jdk.disabled.namedGroups","X448");

但是上面的东西在JDK 17中不起作用。有人能帮助我在JDK 17中禁用X448椭圆曲线吗?

5vf7fwbs

5vf7fwbs1#

没有与您显示的名称相同或类似的系统属性。(此外,从技术上讲,代码中设置的系统属性不是'JVM参数',尽管它们可以具有相同的 * 效果 *。)
在Java 8 u271以上、11.0.9以上和14以上版本中,当使用“标准”(上游分发)java.security文件时,有一个security属性jdk.disabled.namedCurves(不是Groups)被“包含”到其他三个 security 属性jdk.{certpath,jar,tls}.disabledAlgorithms中,其效果是禁用那些现在不安全、不可移植或不推荐的曲线。
您的代码可以将, X448添加到jdk.disabled.namedCurves,并使其自动应用于其他三种情况;certpath永远不会使用X448,因为它不支持签名,我非常肯定jar也不会,所以这很可能只影响TLS。或者您可以直接将其添加到jdk.tls.disabledAlgorithms中,并确保它只影响TLS。无论哪种情况,您都应该将其添加到现有值中,而不是替换现有值,因为所有这四个属性都已经包含了许多曲线或算法。它们分别需要被禁用以防止各种问题或风险。
无论是哪种情况,你都必须在JVM开始执行的时候,特别是在任何类第一次引用sun.security.util.DisabledAlgorithmConstraints之前(直接或间接)。我不确定你的main方法的开始是否足够早,尽管你可以尝试一下。为此,您可以在j 9 up中修改文件JDKORJRE/conf/security/java.security或在j8 down中修改文件JRE/lib/security/java.security,这会影响使用该JRE的所有JVM,或者通过创建修改或补丁文件并在特定JVM上使用system属性java.security.properties,如标准文件中的注解所述;这需要在JVM启动期间生效,因此-D * 参数 * 是实现它的唯一方法。
很遗憾,这不是一个编程问题,我不确定它是否算作开发,所以这里可能离题了。

相关问题