Android网络编程——https 不验证证书方式(信任所有证书)

简介:

      前面写了http的联网方式,Android平台上经常有使用https的需求,对于https服务器使用的根证书是受信任的证书的话,实现https是非常简单的,直接用httpclient库就行了,与使用http几乎没有区别。但是在大多数情况下,服务器所使用的根证书是自签名的,或者签名机构不在设备的信任证书列表中,这样使用httpclient进行https连接就会失败。解决这个问题的办法有两种,一是在发起https连接之前将服务器证书加到httpclient的信任证书列表中,这个相对来说比较复杂一些,很容易出错;另一种办法是让httpclient信任所有的服务器证书,这种办法相对来说简单很多,但安全性则差一些,但在某些场合下有一定的应用场景。这一篇主要实现httpclient信任所有的服务器证书。

      直接给出代码:

     

public class HttpsTestActivity extends Activity {     /** Called when the activity is first created. */ 	private TextView text;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         text=(TextView)findViewById(R.id.textView1);         GetHttps();     }          private void GetHttps(){     	String https = "https://www.google.com.hk";         try{         	SSLContext sc = SSLContext.getInstance("TLS");             sc.init(null, new TrustManager[]{new MyTrustManager()}, new SecureRandom());             HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());             HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());             HttpsURLConnection conn = (HttpsURLConnection)new URL(https).openConnection();             conn.setDoOutput(true);             conn.setDoInput(true);             conn.connect();             BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));              StringBuffer sb = new StringBuffer();              String line;              while ((line = br.readLine()) != null)                  sb.append(line);                             text.setText(sb.toString());            }catch(Exception e){                 Log.e(this.getClass().getName(), e.getMessage());            }            }          private class MyHostnameVerifier implements HostnameVerifier{             @Override             public boolean verify(String hostname, SSLSession session) {                     // TODO Auto-generated method stub                     return true;             }         }         private class MyTrustManager implements X509TrustManager{             @Override             public void checkClientTrusted(X509Certificate[] chain, String authType)                             throws CertificateException {                     // TODO Auto-generated method stub               }             @Override             public void checkServerTrusted(X509Certificate[] chain, String authType)                              throws CertificateException {                     // TODO Auto-generated method stub                 }             @Override             public X509Certificate[] getAcceptedIssuers() {                     // TODO Auto-generated method stub                     return null;             }                }    }

使用HttpsURLConnection时需要实现HostnameVerifier 和 X509TrustManager,这两个实现是必须的,要不会报安全验证异常。


/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/




     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/1230782,如需转载请自行联系原作者



相关文章
|
2天前
|
安全 Android开发
Android之OKHttp基本使用和OKHttp发送https请求安全认证
Android之OKHttp基本使用和OKHttp发送https请求安全认证
11 0
|
3天前
|
Android开发
Android网络访问超时
Android网络访问超时
13 2
|
3天前
|
Java Linux API
统计android设备的网络数据使用量
统计android设备的网络数据使用量
16 0
|
3天前
|
编解码 开发工具 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
38 2
|
2天前
|
设计模式 算法 Android开发
2024年Android网络编程总结篇,androidview绘制流程面试
2024年Android网络编程总结篇,androidview绘制流程面试
2024年Android网络编程总结篇,androidview绘制流程面试
|
3天前
|
Android开发
android检测网络连接是否存在(一)
android检测网络连接是否存在(一)
12 2
|
3天前
|
Android开发
Android中Glide加载Https图片失败的解决方案
Android中Glide加载Https图片失败的解决方案
18 1
|
3天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
3天前
|
存储 应用服务中间件 网络安全
Android 网络链接稳定性测试解决方案
Android 网络链接稳定性测试解决方案
23 0
|
3天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android's AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
12 0