问题:
项目中Android https或http请求地址重定向为HTTPS的地址,相信很多人都遇到了这个异常(无终端认证): javax.NET.ssl.SSLPeerUnverifiedException: No peer certificate

解决过程:
1.没遇到过的问题,搜索吧,少年

log里出现这个异常,作者第一次遇到,不知道啥意思。看下字面意思,是ssl协议中没有终端认证。SSL?作者没用到ssl协议呀,只是通过httpClient请求一个重定向https的地址。
好吧,google下,知道了个差不多情况的帖子,http://www.eoeandroid.com/thread-161747-1-1.html。恩恩,一个不错的帖子,给出了个解决方案。照着来试下。添加个继承SSLSocketFactory的
自定义类。并在初始化httpclient支持https时,注册进去。看下面代码:

public class HttpClientHelper {0203    private static HttpClient httpClient;0405    private HttpClientHelper() {06    }0708    public static synchronized HttpClient getHttpClient() {0910        if (null == httpClient) {11            // 初始化工作12            try {13                KeyStore trustStore = KeyStore.getInstance(KeyStore14                        .getDefaultType());15                trustStore.load(null, null);16                SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);17                sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  //允许所有主机的验证1819                HttpParams params = new BasicHttpParams();2021                HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);22                HttpProtocolParams.setContentCharset(params,23                        HTTP.DEFAULT_CONTENT_CHARSET);24                HttpProtocolParams.setUseExpectContinue(params, true);2526                // 设置连接管理器的超时27                ConnManagerParams.setTimeout(params, 10000);28                // 设置连接超时29                HttpConnectionParams.setConnectionTimeout(params, 10000);30                // 设置socket超时31                HttpConnectionParams.setSoTimeout(params, 10000);3233                // 设置http https支持34                SchemeRegistry schReg = new SchemeRegistry();35                schReg.register(new Scheme("http", PlainSocketFactory36                        .getSocketFactory(), 80));37                schReg.register(new Scheme("https", sf, 443));3839                ClientConnectionManager conManager = new ThreadSafeClientConnManager(40                        params, schReg);4142                httpClient = new DefaultHttpClient(conManager, params);43            } catch (Exception e) {44                e.printStackTrace();45                return new DefaultHttpClient();46            }47        }48        return httpClient;49    }5051}5253class SSLSocketFactoryEx extends SSLSocketFactory {5455    SSLContext sslContext = SSLContext.getInstance("TLS");5657    public SSLSocketFactoryEx(KeyStore truststore)58            throws NoSuchAlgorithmException, KeyManagementException,59            KeyStoreException, UnrecoverableKeyException {60        super(truststore);6162        TrustManager tm = new X509TrustManager() {6364            @Override65            public java.security.cert.X509Certificate[] getAcceptedIssuers() {66                return null;67            }6869            @Override70            public void checkClientTrusted(71                    java.security.cert.X509Certificate[] chain, String authType)72                    throws java.security.cert.CertificateException {7374            }7576            @Override77            public void checkServerTrusted(78                    java.security.cert.X509Certificate[] chain, String authType)79                    throws java.security.cert.CertificateException {8081            }82        };8384        sslContext.init(null, new TrustManager[] { tm }, null);85    }8687    @Override88    public Socket createSocket(Socket socket, String host, int port,89            boolean autoClose) throws IOException, UnknownHostException {90        return sslContext.getSocketFactory().createSocket(socket, host, port,91                autoClose);92    }9394   @Override95   public Socket createSocket() throws IOException {96        return sslContext.getSocketFactory().createSocket();97    }98}

http://blog.csdn.net/lihenair/article/details/17441169

更多相关文章

  1. Android基础开源应用项目
  2. Android(安卓)Android(安卓)Studio 3.3 项目中导入环信的 EaseUI
  3. android 新浪微博sdk使用-分享
  4. Android面试系列文章2018之Java部分类加载器篇
  5. Android防止崩溃的库,有效的降低Crash率
  6. Android高手进阶教程(十)之----Android(安卓)PopupWindow的使用!
  7. android 设备唯一码的获取,Cpu号,Mac地址
  8. DDPush开源推送框架源码分析之APPServer到DDPush
  9. Android(安卓)sdk安装目录中没有platform-tools目录问题详解

随机推荐

  1. android开发之Android ActionBar完全解析
  2. android 键对应的号码
  3. 深入Activity
  4. Android侧滑菜单DrawerLayout的使用
  5. android ndk 调用第三方so
  6. Android前置摄像头预览并检测人脸,获取人
  7. Android基于ViewFilpper实现文字LED显示
  8. Android中px dpi dip density densityDpi
  9. Android有用代码片段(三)
  10. Android 开发佳站