gpt4 book ai didi

java - SSLContext.getInstance ("TLS") 漏洞

转载 作者:行者123 更新时间:2023-12-04 22:38:29 47 4
gpt4 key购买 nike

我们接到电话SSLContext.getInstance("TLS")报告为漏洞。推荐的修复方法是使用 SSLContext.getInstance("TLSv1.2") .
我了解到自 2021 年 4 月以来,TLSv1.1 和 TLSv1 在 Java 实现中被禁用,但是当我尝试这个修复时,我发现这将禁用 TLSv1.3(即使我通过 sslSocket.setEnabledProtocols(protocols) 添加它)。
当我使用 SSLContext.getInstance("TLSv1.3") , sslSocket.getEnabledProtocols()返回 TLSv1.3 和 TLSv1.2,如果服务器端只支持 TLSv1.2,则建立连接。
这出乎我的意料。对我来说,这将是“算法降级”。
文档只说“可能支持其他 SSL/TLS 版本”,所以当我指定“TLSv1.3”时,我不能指望回退到“TLSv1.2”有效,对吧?
虽然它看起来像 SSLContext.getInstance参数是支持的最高 TLS 版本。
那么,如果服务器端可能支持 TLSv1.2 或 TSLv1.3 或两者(并且没有报告漏洞),那么实现 SSL 连接的正确方法是什么?
问候,
安德烈亚斯

最佳答案

您没有说您使用的是哪个漏洞检查器,但报告与此相符:

  • Weak SSL/TLS protocols should not be used - RSPEC-4423

  • 假设是这样,您还应该阅读此 Sonar 错误报告:
  • Conflicting rules for vulnerable use of Java’s SSLContext

  • 它表明 SSLContext.getInstance(...) 中的论点不限制使用的 TLS 版本。因此,漏洞报告是误报。随意使用不同的值使误报“消失”。但请注意,您没有解决潜在/真正的漏洞。
    要正确限制用于特定连接的 SSL/TLS 版本,您可以配置 SSLEngine目的:
    serverEngine = serverSslContext.createSSLEngine();
    serverEngine.setEnabledProtocols(new String[] { "TLSv1.2", "TLSv1.3" });
    或者,您可以通过在命令行上设置 JVM 属性来限制这个 JVM 范围:
    java -Dhttps.protocols="TLSv1.2,TLSv1.3" \
    -Djdk.tls.client.protocols="TLSv1.2,TLSv1.3" <MyApp>
    引用:
  • Instructions to disable SSL v3.0 in Oracle JDK and JRE
  • 关于java - SSLContext.getInstance ("TLS") 漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69571364/

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