我的服务器端是用Centos6.4+apache搭建的https 网站。

Android通过http下载不需要证书,不需要SSLfactory等,所以https和http的区别仅此而已。



1.证书相关的类,添加如下类:

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;


import javax.net.ssl.X509TrustManager;

public class TrustAllManager implements X509TrustManager {
        public void checkClientTrusted(X509Certificate[] cert, String authType)
                        throws CertificateException {
        }


        public void checkServerTrusted(X509Certificate[] cert, String authType)
                        throws CertificateException {
        }


        public X509Certificate[] getAcceptedIssuers() {
                return null;
        }
}


2.SSLFactory相关的类如下:

import java.io.IOException;
import java.net.Socket;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;


import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;


import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.SSLSocketFactory;


public class TrustAllSSLSocketFactory extends SSLSocketFactory {
        private javax.net.ssl.SSLSocketFactory factory;


        public TrustAllSSLSocketFactory() throws KeyManagementException,
                        NoSuchAlgorithmException, KeyStoreException,
                        UnrecoverableKeyException {
                super(null);
                try {
                        SSLContext sslcontext = SSLContext.getInstance("TLS");
                        sslcontext.init(null, new TrustManager[] { new TrustAllManager() },
                                        null);
                        factory = sslcontext.getSocketFactory();
                        setHostnameVerifier(new AllowAllHostnameVerifier());
                } catch (Exception ex) {
                }
        }


        public static SSLSocketFactory getDefault() throws KeyManagementException,
                        NoSuchAlgorithmException, KeyStoreException,
                        UnrecoverableKeyException {
                return new TrustAllSSLSocketFactory();
        }


        @Override
        public Socket createSocket() throws IOException {
                return factory.createSocket();
        }


        @Override
        public Socket createSocket(Socket socket, String s, int i, boolean flag)
                        throws IOException {
                return factory.createSocket(socket, s, i, flag);
        }


 
        
        public javax.net.ssl.SSLSocketFactory getSSLSocketFactory() {
          return factory;
        } 
}


3.https需要把上面的Factory注册上,TrustAllManager 已经用在Factory上面了。

  // Step One register scheme of https
 HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
  
   SSLSocketFactory socketFactory = null;
   try {
     socketFactory = TrustAllSSLSocketFactory.getDefault();
   }
   catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }

   HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
   HttpsURLConnection.setDefaultSSLSocketFactory(((TrustAllSSLSocketFactory)socketFactory).getSSLSocketFactory());



注意第三步应该放在等到HttpsURLConnection得到连接之前,或者DefaultHttpClient类初始化之间,否则就会报各种各样的错误。


更多相关文章

  1. Android Studio中获取sha1证书指纹数据的方法
  2. MAC系统Android Studio默认debug签名证书存储路径
  3. Android中动态初始化布局参数以及ConstraintLayout使用中遇到的
  4. Android GPS学习笔记—LMS初始化
  5. 命令获取 Eclipse Android 证书指纹 MD5、SHA1
  6. android kernel 初始化 2
  7. Android MediaServer初始化流程
  8. Android中使用HttpClient访问https时,安全证书的处理
  9. Android 数字证书详解

随机推荐

  1. [Android] ImageView.ScaleType设置图解
  2. 创业公司招人才
  3. Android中Adapter中edittext,checkbox记住
  4. Android(安卓)SharedPreferences应用解析
  5. android WebView总结
  6. Android如何查看应用签名信息
  7. Android这四个你不可不知的知识点,你都了
  8. android 笔记----禁止横屏和竖屏切换
  9. Android(安卓)USB Gadget复合设备驱动(打
  10. android cocos2d-x for Android安装和学