Android开发中实现https校验

在安卓开发中需要自己写代码实现校验公钥的功能

当然,  如果是自己服务器,就不用校验,
如果是别人的服务器,比如银行,就需要校验

在这里, 小编采用从github上下载的开源框架实现,在开源框架中添加部分代码

下载到开源框架后, 在 AsyncHttpClient.java文件中添加

找到215行代码, 在这里添加校验的代码

证书文件需要拷贝到src的根目录

 1  //在这里添加一段 代码, 实现 https 连接,   检验  , 主要是去校验 证书的合法性
 2          try {
 3             InputStream ins = AsyncHttpClient.class.getClassLoader()
 4                     .getResourceAsStream("hehe.cer"); // 这个文件就是网站的公钥
 5
 6
 7             CertificateFactory cerFactory = CertificateFactory
 8                     .getInstance("X.509");// X.509 公钥文件 .pk8 私钥文件的扩展名
 9             Certificate cer = cerFactory.generateCertificate(ins);
10             KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
11             keyStore.load(null, null);
12             keyStore.setCertificateEntry("trust", cer);
13             SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore);
14             schemeRegistry.register(new Scheme("https", socketFactory,
15                     httpsPort));
16
17         } catch (Exception e) {
18             // TODO Auto-generated catch block
19             e.printStackTrace();
20         }
21
22         return schemeRegistry;

还有不校验的代码

 1 //在这里添加一段 代码, 实现 https 连接,  不检验
 2         try {
 3             KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
 4             trustStore.load(null, null);
 5             SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
 6             //相当于 不在校验数据的合法性
 7             sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); // 允许所有主机的验证
 8             schemeRegistry.register(new Scheme("https", sslSocketFactory,
 9             httpsPort));
10             schemeRegistry.register(new Scheme("https",sf, httpsPort));
11         } catch (Exception e) {
12             e.printStackTrace();
13         }
14
15
16         return schemeRegistry;

注意,

在拷贝代码的过程中 SSLSocketFactory 需要自己创建出来, 代码如下:

 1 package com.loopj.android.http;
 2
 3 import java.io.IOException;
 4 import java.net.Socket;
 5 import java.net.UnknownHostException;
 6 import java.security.KeyManagementException;
 7 import java.security.KeyStore;
 8 import java.security.KeyStoreException;
 9 import java.security.NoSuchAlgorithmException;
10 import java.security.UnrecoverableKeyException;
11
12 import javax.net.ssl.SSLContext;
13 import javax.net.ssl.TrustManager;
14 import javax.net.ssl.X509TrustManager;
15
16 import org.apache.http.conn.ssl.SSLSocketFactory;
17
18 class SSLSocketFactoryEx extends SSLSocketFactory {
19
20     SSLContext sslContext = SSLContext.getInstance("TLS");
21
22     public SSLSocketFactoryEx(KeyStore truststore)
23             throws NoSuchAlgorithmException, KeyManagementException,
24             KeyStoreException, UnrecoverableKeyException {
25         super(truststore);
26
27         TrustManager tm = new X509TrustManager() {
28
29             @Override
30             public java.security.cert.X509Certificate[] getAcceptedIssuers() {
31                 return null;
32             }
33
34             @Override
35             public void checkClientTrusted(
36                     java.security.cert.X509Certificate[] chain,
37                     String authType)
38                     throws java.security.cert.CertificateException {
39
40             }
41
42             @Override
43             public void checkServerTrusted(
44                     java.security.cert.X509Certificate[] chain,
45                     String authType)
46                     throws java.security.cert.CertificateException {
47
48             }
49         };
50
51         sslContext.init(null, new TrustManager[] { tm }, null);
52     }
53
54     @Override
55     public Socket createSocket(Socket socket, String host, int port,
56             boolean autoClose) throws IOException, UnknownHostException {
57         return sslContext.getSocketFactory().createSocket(socket, host,
58                 port, autoClose);
59     }
60
61     @Override
62     public Socket createSocket() throws IOException {
63         return sslContext.getSocketFactory().createSocket();
64     }
65 }
时间: 2024-08-24 00:09:12

Android开发中实现https校验的相关文章

Android开发中使用七牛云存储进行图片上传下载

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了.可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端S

MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一时候让Model仅仅关系数据的处理.基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包括4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:须要View实现的接口,V

Android开发中的MVP架构(转)

写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn=1cd10bd9efaac7083575367a8b4af52f&scene=1&srcid=0910ARzPpBvVYPI1NDBZnixa#wechat_redirect 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目

Android开发中微信登陆

关于android开发中的微信登陆,除了使用shareSDK,我们使用腾讯开发者平台上提供的SDK,按照官网步骤实现第三方登陆的功能. 微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权.该模式整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数: 2. 通过code参数加上AppID和AppSecret等,通过API换取access_tok

Android 开发中的日常积累

欢迎Star,Fork https://github.com/lizhangqu/CoreLink 里面记录了开发过程中有用的东西,欢迎补充,不定时更新. Android 性能优化 Android内存优化之OOM Android最佳性能实践(1):合理管理内存 Android最佳性能实践(2):分析内存的使用情况 Android最佳性能实践(3):高性能编码优化 Android最佳性能实践(4):布局优化技巧 Android 加固与反编译 Apktool dex2jar DecompileApk

MVP模式在Android开发中的最佳实践

这篇文章拖了好久了,一直存在草稿箱里没有继续写,趁今天有空,撸撸完. 回想一下,你刚刚学习Android的时候,总会看到一些书上写着,Android使用的是MVC模式,Activity就是一个Controller,或许那个时候,你没有什么深刻的体会.随着经验的积累.你发现,Activity既是Controller,掌管着许许多多的业务逻辑,同时它也作为View的一部分,控制着视图层的显示.久而久之,这个Controller便显得过于重,职责不再那么单一. 于是,再后来,为了使Activity的职

Android学习探索之Java 8 在Android 开发中的应用

前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上,一直没有看到支持Java8的消息.Android到底会不会支持Java8呢?答案是肯定的,Android N已经开始支持Java 8 了. 关于Java 8 (1.)使用Lambda表达式 Java 8的一大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.当开发者在编写Lambda表达式时

Android开发中无处不在的设计模式——动态代理模式

继续更新设计模式系列,写这个模式的主要原因是最近看到了动态代理的代码. 先来回顾一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式--Builder模式 - Android开发中无处不在的设计模式--观察者模式 - Android开发中无处不在的设计模式--原型模式 - Android开发中无处不在的设计模式--策略模式 动态代理模式在Java WEB中的应用简直是随处可见,尤其在Spring框架中大量的用到了动态代理:算是最重要

android开发中经常遇到的问题汇总

大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合! [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requirement![2011-01-19 16:39:10 - ApiDemos] Device API version is 8 (Android 2.2) 原因: 不影响正常运行.在AndroidManifest.