簡體   English   中英

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()返回 TLSv1.3 和 TLSv1.2,如果服務器端僅支持 TLSv1.2,則建立連接。

這出乎我的意料。 對我來說,這將是“算法降級”。

文檔只說“可能支持其他 SSL/TLS 版本”,所以當我指定“TLSv1.3”時,我不能指望回退到“TLSv1.2”有效,對嗎?

盡管看起來SSLContext.getInstance參數是支持的最高 TLS 版本。

那么,如果服務器端可能支持 TLSv1.2 或 TSLv1.3 或兩者(並且沒有報告漏洞),那么實現 SSL 連接的正確方法是什么?

問候, 安德烈亞斯

您沒有說明您使用的是哪個漏洞檢查器,但報告與此相符:

假設是這樣,您還應該閱讀此聲納錯誤報告:

它表明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>

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM