Android网络编程——https 不验证证书方式(信任所有证书)
来源:互联网 发布:淘宝宝贝如何设置选项 编辑:程序博客网 时间:2024/05/18 00:13
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,这两个实现是必须的,要不会报安全验证异常。
原文地址:http://blog.csdn.net/xyz_lmn/article/details/8027334
- Android网络编程——https 不验证证书方式(信任所有证书)
- Android网络编程——https 不验证证书方式(信任所有证书)
- Android网络编程——https 不验证证书方式(信任所有证书)
- Android网络编程——https 不验证证书方式(信任所有证书)
- https信任所有证书
- Android实现https网络通信之添加指定信任证书/信任所有证书
- Android实现https网络通信之添加指定信任证书/信任所有证书
- Android开发之信任所有https证书
- java https信任所有证书
- Android平台实现https信任所有证书的方法
- Android平台实现https信任所有证书的方法
- Android平台实现https信任所有证书的方法
- Android平台实现https信任所有证书的方法
- Android平台实现https信任所有证书的方法
- Android平台实现https信任所有证书的方法
- Android平台实现https信任所有证书的方法
- 添加https证书信任
- android https遇到自签名证书/信任证书
- Distributed garbage collection used in RMI
- POJ 1659 Frogs' Neighborhood
- 查找算法_二分查找
- 尾部插入节点
- Yii中CDbCriteria常用总结(转)
- Android网络编程——https 不验证证书方式(信任所有证书)
- 在青软实训的一个月里,我经历了从一个学生的位置到一个公司职员的过度。
- IO寄存器和传统内存对比
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- hdu1171Big Event in HDU
- Java多线程之CountDownLatch(一)
- python学习手册
- phpmailer使用简介
- 浙大PAT advanced level 1003 emergency