gpt4 book ai didi

Java - 如何仅使用 JVM Config 为某些协议(protocol)禁用 TLS 密码?

转载 作者:IT老高 更新时间:2023-10-28 21:02:14 26 4
gpt4 key购买 nike

我已经看到很多在 java 中使用 jdk.tls.disabledAlgorithms 禁用 TLS 密码的示例,例如:

 jdk.tls.disabledAlgorithms=MD2, RSA keySize < 1024, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

但我如何才能使用 jdk.tls.disabledAlgorithms 或类似的配置仅对某些协议(protocol)禁用密码?

例如,如何仅对 TLSv1.1 禁用 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

好像不支持opensssl这样的方式,是这样的:

TLSv1.1:!TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

它不会导致任何错误,但密码仍然是允许的。

编辑:请注意,我只对基于 JVM 配置的答案真正感兴趣,因为我不控制许多这些服务器上的代码,只控制 JVM 和 JVM 配置。有些甚至是第 3 方服务器,所以更多的是操作级别的东西。

编辑 2:请注意,您可以运行 java 应用程序并提供更改使用的协议(protocol)和密码的参数,例如java -server -Djava.security.properties=./my/custom/java.security -jar myapp.jar 会这样做 - 但它不会让你按协议(protocol)过滤密码,只有密码,或协议(protocol),据我所见。该文件将包含一个属性条目,如 jdk.tls.disabledAlgorithms

最佳答案

发布我的评论作为答案,因为为什么不。

其他答案,以及我在网上找到的每个文档,似乎都同意您所要求的内容在 Java 中是不可能的,至少目前还不可能。您可以全局启用/禁用协议(protocol),也可以全局启用/禁用密码类型,但不能基于另一个进行。

但是,由于您在 DevOps 方面,也许非 Java 解决方案是可能的。您可以运行应用程序的单独实例,每个实例仅启用 TLSv1.1、仅启用 TLSv1.2 等,并将所需的密码过滤器应用于每个实例;然后让 nginx(或你使用的任何东西)根据检测到的协议(protocol)将流量重定向到适当的实例。

所以,NODE1 的一个实例:

jdk.tls.client.protocols=TLSv1.1
jdk.tls.disabledAlgorithms=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

在 NODE2 的另一个实例:

jdk.tls.client.protocols=TLSv1.2
jdk.tls.disabledAlgorithms=...

还有一些 nginx 规则(使用 returnrewrite 你认为合适的):

server {
[...]
if ( $ssl_protocol = TLSv1.1 ) {
return 302 $scheme://NODE1.yourhost.com$request_uri;
}
if ( $ssl_protocol = TLSv1.2 ) {
rewrite ^ $scheme://NODE2.yourhost.com$request_uri;
}

我只是一名 Java 开发人员,我对 nginx 的经验非常有限,因此您可能需要稍微调整一下配置。只是想帮忙。

关于Java - 如何仅使用 JVM Config 为某些协议(protocol)禁用 TLS 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52779312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com