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,如需转载请自行联系原作者



相关文章
|
1月前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin协程优化网络请求处理
【2月更文挑战第30天】 在移动应用开发领域,网络请求的处理是影响用户体验的关键环节。针对Android平台,利用Kotlin协程能够极大提升异步任务处理的效率和简洁性。本文将探讨如何通过Kotlin协程优化Android应用中的网络请求处理流程,包括协程的基本概念、网络请求的异步执行以及错误处理等方面,旨在帮助开发者构建更加流畅和响应迅速的Android应用。
|
3天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
11天前
|
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.
10 0
|
11天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
10 0
|
14天前
|
安全 网络协议 网络安全
网络原理(5)--HTTPS是如何进行加密的
网络原理(5)--HTTPS是如何进行加密的
11 0
|
18天前
|
域名解析 网络协议 应用服务中间件
阿里云SSL证书配置(HTTPS证书配置)
该内容是一个关于如何在阿里云上准备和购买SSL证书,以及如何为网站启用HTTPS的步骤指南。首先,需要注册并实名认证阿里云账号,然后在SSL证书控制台选择证书类型、品牌和时长进行购买。申请证书时填写域名信息,并进行DNS验证,这包括在阿里云域名管理板块添加解析记录。完成验证后提交审核,等待证书审核通过并下载Nginx格式的证书文件。最后,将证书配置到网站服务器以启用HTTPS。整个过程涉及账户注册、实名认证、证书购买、DNS设置和证书下载及安装。
87 0
|
22天前
|
网络安全 数据安全/隐私保护 Docker
免费的HTTPS证书
免费的HTTPS证书
68 1
|
1月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 验证Samba配置文件 testparm命令 使用教程
【Shell 命令集合 网络通讯 】Linux 验证Samba配置文件 testparm命令 使用教程
38 0
|
1月前
|
存储 网络安全 数据安全/隐私保护
Windows Server 2019 IIS HTTPS证书部署流程详解
Windows Server 2019 IIS HTTPS证书部署流程详解
|
1月前
|
安全 网络安全 CDN
阿里云CDN HTTPS 证书配置流程
阿里云CDN HTTPS 证书配置流程
174 1