Java程序禁用SSL认证存在安全风险

Sal*_*Sal 1 java security https

我们的团队会抓取网站以使我们的信息保持最新。我在抓取 HTTPS 页面时遇到了安全异常。问题在于 Java 在接受页面自签名证书时存在问题。

我没有保留要接受的证书列表(这在将来可能很难维护),而是使用 neu242 提供的解决方法来禁用 SSL 证书验证

public static void disableCertificateValidation() 
{
    // Create a trust manager that does not validate certificate chains
      TrustManager[] trustAllCerts = new TrustManager[] { 
        new X509TrustManager() {
          public X509Certificate[] getAcceptedIssuers() { 
            return new X509Certificate[0]; 
          }


        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
        {
            // TODO Auto-generated method stub

        }
        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
        {
            // TODO Auto-generated method stub

        }
      }};

      // Ignore differences between given hostname and certificate hostname
      HostnameVerifier hv = new HostnameVerifier() {

        @Override
        public boolean verify(String arg0, SSLSession arg1)
        {
            // TODO Auto-generated method stub
            return true;
        }
      };

      // Install the all-trusting trust manager
      try {
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
      } catch (Exception e) {}
}
Run Code Online (Sandbox Code Playgroud)

当然,这带来了重大的安全风险。但是,如果我仅在下载程序(下载图像和 pdf 文档的程序)中使用此代码,并且不使用该程序发送任何敏感信息,那么存在哪些安全风险?据我了解,此信任管理器将仅为正在运行的 JVM 设置(运行该程序的服务器不会在操作系统级别禁用证书验证)。此外,如果我对图像和文档的请求被拦截,我的代码将尝试分别将响应形成图像或 pdf,并且不会启动任何恶意软件。是否存在我遗漏的安全风险?

Oli*_*hti 5

您面临的风险是恶意服务器可能会将其自身置于您和源服务器之间(这是中间人攻击)。换句话说,您会认为您从真实服务器收到文档,但实际上您会从盗版服务器收到文档。所以这取决于文件的类型以及您如何处理它们......