SV.WEAK.TLS
不应使用弱 SSL/TLS 协议。
如果使用弱 TLS 协议(比如 1.0 或 1.1),Klocwork 会报告 SV.WEAK.TLS 缺陷。
漏洞与风险
安全专家普遍建议强制实施 TLS 1.2 作为最低协议版本;他们建议禁用较旧的版本,如 TLS 1.0 或 1.1。否则容易受到降级攻击,能够拦截连接的恶意行为者可能会修改请求的协议版本,并将其降级为不太安全的版本。
缓解与预防
应该使用更安全的协议,如 TLS 1.2 和更高版本。
漏洞代码示例 1
复制
import javax.net.ssl.*;
public class Test {
public void test() throws Exception {
SSLContext context = SSLContext.getInstance("TLSv1.1");
}
}
Klocwork 在第 4 行报告了 SV.WEAK.TLS 缺陷,指出“建议强制实施 TLS 1.2 作为最低协议版本,并禁止使用 TLS 1.0/1.1 等旧版本,因为它们的安全性较低。”
修正代码示例 1
复制
import javax.net.ssl.*;
public class Test {
public void test() throws Exception {
SSLContext context = SSLContext.getInstance("TLSv1.2");
}
}
Klocwork 不再报告缺陷,因为使用了 TLS 1.2。
漏洞代码示例 2
复制
import javax.net.ssl.*;
public class Test {
public void test() {
SSLSocket socket = null;
try {
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
socket = (SSLSocket) factory.createSocket("abc.com", 443);
socket.setEnabledProtocols(new String[] {"TLSv1.0"});
socket.startHandshake();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (socket != null) {
socket.close();
}
}
}
}
Klocwork 在第 7 行报告了 SV.WEAK.TLS 缺陷,指出“建议强制实施 TLS 1.2 作为最低协议版本,并禁止使用 TLS 1.0/1.1 等旧版本,因为它们的安全性较低。”
修正代码示例 2
复制
import javax.net.ssl.*;
public class Test {
public void test() {
SSLSocket socket = null;
try {
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
socket = (SSLSocket) factory.createSocket("abc.com", 443);
socket.setEnabledProtocols(new String[] {"TLSv1.2"});
socket.startHandshake();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (socket != null) {
socket.close();
}
}
}
}
Klocwork 不再报告缺陷,因为使用了 TLS 1.2。
漏洞代码示例 3
复制
import javax.net.ssl.*;
public class Test {
public void test() {
SSLServerSocket serverSocket = null;
try {
SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
serverSocket = (SSLServerSocket) factory.createServerSocket(8980);
SSLParameters params = new SSLParameters();
params.setProtocols(new String[] {"TLSv1.1"});
serverSocket.setSSLParameters(params);
SSLSocket sslSocket = (SSLSocket) serverSocket.accept();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
serverSocket.close();
}
}
}
}
Klocwork 在第 9 行报告了 SV.WEAK.TLS 缺陷,指出“建议强制实施 TLS 1.2 作为最低协议版本,并禁止使用 TLS 1.0/1.1 等旧版本,因为它们的安全性较低。”
修正代码示例 3
复制
import javax.net.ssl.*;
public class Test {
public void test() {
SSLServerSocket serverSocket = null;
try {
SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
serverSocket = (SSLServerSocket) factory.createServerSocket(8980);
SSLParameters params = new SSLParameters();
params.setProtocols(new String[] {"TLSv1.3"});
serverSocket.setSSLParameters(params);
SSLSocket sslSocket = (SSLSocket) serverSocket.accept();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
serverSocket.close();
}
}
}
}
Klocwork 不再报告缺陷,因为使用了 TLS 1.3。