我们使用WhiteHat源扫描仪扫描我们的源代码。该工具在2种方法中发现“不正确的证书验证”(CWE-295)安全问题。这是一个真正积极的安全问题吗?如果是,我们如何在Java 8中修复它,我们有解决方案来解决这样的问题吗?非常感谢。
// http://www.nakov.com/blog/2009/07/16/disable-certificate-validation-in-java-ssl-connections/
public class JavaCertificationUtils {
private static final SanitizedLogger LOG = new SanitizedLogger(JavaCertificationUtils.class);
public static void javaTrustAllCerts() {
try {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (Exception e) {
LOG.error("Java Certificate All Certs Exception.", e);
}
}
}发布于 2020-02-21 19:37:18
您显示的代码做了两件事:
它禁用TLS证书链验证(使用trustAllCerts).
allHostsValid).))。
怎么解决这个问题?首先-删除代码。所有的一切。造成损害的确切线条如下:
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);您可能会注意到(概率为90%),代码将停止工作。这可能是由于不同的原因。
,
将失败。
然后让我们知道错误是什么。
https://stackoverflow.com/questions/60330475
复制相似问题