SSLContext.getInstance("TLS") 漏洞
SSLContext.getInstance("TLS") vulnerability
我们将调用 SSLContext.getInstance("TLS")
报告为漏洞。推荐的修复方法是使用 SSLContext.getInstance("TLSv1.2")
.
我了解到自 2021 年 4 月起在 Java 实施中 TLSv1.1 和 TLSv1 无论如何都被禁用,但是当我尝试此修复时,我发现这将禁用 TLSv1.3(即使我添加通过 sslSocket.setEnabledProtocols(protocols)
).
当我同时使用SSLContext.getInstance("TLSv1.3")
、sslSocket.getEnabledProtocols()
returns TLSv1.3 和 TLSv1.2 时,如果服务器端仅支持 TLSv1.2,则建立连接。
这出乎我的意料。对我来说,这将是“算法降级”。
文档只说“可能支持其他 SSL/TLS 版本”,所以当我指定“TLSv1.3”时,我不能指望回退到“TLSv1.2”会起作用,对吗?
虽然看起来 SSLContext.getInstance
参数是支持的最高 TLS 版本。
那么,如果服务器端可能支持 TLSv1.2 或 TSLv1.3 或两者(并且没有报告漏洞),那么实现 SSL 连接的正确方法是什么?
此致,
安德烈亚斯
你没有说你使用的是哪个漏洞检查器,但报告是这样的:
假设是这样,您还应该阅读此 Sonar 错误报告:
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>
参考:
我们将调用 SSLContext.getInstance("TLS")
报告为漏洞。推荐的修复方法是使用 SSLContext.getInstance("TLSv1.2")
.
我了解到自 2021 年 4 月起在 Java 实施中 TLSv1.1 和 TLSv1 无论如何都被禁用,但是当我尝试此修复时,我发现这将禁用 TLSv1.3(即使我添加通过 sslSocket.setEnabledProtocols(protocols)
).
当我同时使用SSLContext.getInstance("TLSv1.3")
、sslSocket.getEnabledProtocols()
returns TLSv1.3 和 TLSv1.2 时,如果服务器端仅支持 TLSv1.2,则建立连接。
这出乎我的意料。对我来说,这将是“算法降级”。
文档只说“可能支持其他 SSL/TLS 版本”,所以当我指定“TLSv1.3”时,我不能指望回退到“TLSv1.2”会起作用,对吗?
虽然看起来 SSLContext.getInstance
参数是支持的最高 TLS 版本。
那么,如果服务器端可能支持 TLSv1.2 或 TSLv1.3 或两者(并且没有报告漏洞),那么实现 SSL 连接的正确方法是什么?
此致, 安德烈亚斯
你没有说你使用的是哪个漏洞检查器,但报告是这样的:
假设是这样,您还应该阅读此 Sonar 错误报告:
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>
参考: