首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SSLContext.getInstance("TLS")漏洞

SSLContext.getInstance("TLS")漏洞
EN

Stack Overflow用户
提问于 2021-10-14 13:13:15
回答 1查看 2.2K关注 0票数 1

我们会得到SSLContext.getInstance("TLS")报告为漏洞的电话。推荐的修复方法是使用SSLContext.getInstance("TLSv1.2")

我了解到,自从2021年4月以来,在Java实现中一直禁用TLSv1.1和TLSv1,但是当我尝试这个修复时,我发现这将禁用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连接的正确方法是什么?

你好,安德烈亚斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 13:47:59

您没有说明您使用的是哪个漏洞检查器,但报告与以下内容相匹配:

如果是这样的话,您还应该阅读这个Sonar bug报告:

它指出,SSLContext.getInstance(...)中的参数并不限制所使用的TLS版本。因此,漏洞报告是假阳性的。可以随意使用不同的值来做假阳性的“走开”。但请注意,您并没有解决潜在的/真正的漏洞。

要正确约束用于特定连接的SSL/TLS版本,可以配置SSLEngine对象:

代码语言:javascript
运行
复制
serverEngine = serverSslContext.createSSLEngine();
serverEngine.setEnabledProtocols(new String[] { "TLSv1.2", "TLSv1.3" });

或者,可以通过在命令行上设置JVM属性来约束此JVM范围:

代码语言:javascript
运行
复制
java -Dhttps.protocols="TLSv1.2,TLSv1.3" \
     -Djdk.tls.client.protocols="TLSv1.2,TLSv1.3" <MyApp>

参考资料:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69571364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档