保护连接检查SSL证书?

时间:2015-02-04 08:58:10

标签: java android security ssl

我正在做实习。 在这里,他们给我一个Android应用程序的代码,该代码已被代理安全机构修改,并告诉我更改文档中的一些要点。 现在他们担心信息泄露,因为应用程序在连接到银行服务器时没有检查SSL证书,冒着“中间人”攻击的风险。

是否有任何类可用于检查证书的到期日期。或者如果它被信任?

app中的http连接示例:

           trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            trustStore.load(null, null);
            SSLSocketFactory sf = new CustomSSLSocketFactory(trustStore);
            sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            HttpParams bhttpparams = new BasicHttpParams();
            HttpProtocolParams.setVersion(bhttpparams, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(bhttpparams, "utf-8");
            bhttpparams.setBooleanParameter("http.protocol.expect-continue", false);
            HttpConnectionParams.setConnectionTimeout(bhttpparams, 20000);
            HttpConnectionParams.setSoTimeout(bhttpparams, 200000);
            SchemeRegistry registry = new SchemeRegistry();
            registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            registry.register(new Scheme("https", sf, 443));
            ClientConnectionManager ccm = new ThreadSafeClientConnManager(bhttpparams, registry);
            client = new DefaultHttpClient(ccm, bhttpparams);
            client.getCredentialsProvider().setCredentials(new AuthScope(null, -1), new UsernamePasswordCredentials("", ""));
            HttpResponse response = client.execute(urlws);
            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"), 8);

1 个答案:

答案 0 :(得分:1)

  

sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

漏洞就在这里。删除它。

但是如果没有适当的简报,我会质疑任何向没有知情的实习生提供这项任务的人的能力和理智,你可以告诉他们我这么说。我还要问一些关于这段代码如何在第一次和平中实现的严重问题,以及允许它保留的测试不足。