现在google play对https有比较严格的审核,所以不能用httpclient来跳过https验证
参考文章:
1.https://developer.android.com/training/articles/security-ssl.html#HttpsExample
2.http://www.codeproject.com/Articles/826045/Android-security-Implementation-of-Self-signed-SSL
public class HttpsRequestUtil { /** * @param url * @return result */ private static final int SET_CONNECTION_TIMEOUT = 15 * 1000; private static final int SET_READ_TIMEOUT = 15 * 1000; private static final int SET_SOCKET_TIMEOUT = 15 * 1000; public static String doHttpsRequest(String requestURL, Context mContext,String cerFile ){ MyLogCat.d(Constants.TAG,"doHttpsRequest requestURL = " + requestURL); String resutl = null; CertificateFactory cf; try { cf = CertificateFactory.getInstance("X.509"); AssetManager am = mContext.getAssets(); InputStream caInput = new BufferedInputStream(am.open(cerFile)); Certificate ca; try { ca = cf.generateCertificate(caInput); // System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); } finally { try { caInput.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // Create a KeyStore containing our trusted CAs String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); // Create a TrustManager that trusts the CAs in our KeyStore String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); // Create an SSLContext that uses our TrustManager SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); // Tell the URLConnection to use a SocketFactory from our SSLContext /*URL url = new URL("https://certs.cac.washington.edu/CAtest/");*/ javax.net.ssl.SSLSocketFactory sslSocket = context.getSocketFactory(); HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; URL url = new URL(requestURL); HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection(); urlConnection.setSSLSocketFactory(context.getSocketFactory()); urlConnection.setHostnameVerifier(hostnameVerifier); urlConnection.setConnectTimeout(SET_CONNECTION_TIMEOUT); urlConnection.setReadTimeout(SET_READ_TIMEOUT); InputStream in = urlConnection.getInputStream(); //copyInputStreamToOutputStream(in, System.out); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (sb!=null){ resutl = sb.toString(); } } catch (CertificateException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (NoSuchAlgorithmException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (KeyStoreException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (KeyManagementException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } MyLogCat.d(Constants.TAG,"doHttpsRequest reuslt = " + resutl); return resutl; } }