凌雪
2018-10-24
来源 :网络
阅读 1077
评论 0
摘要:本文将带你了解Android应用开发之android https解析,希望本文对大家学Android有所帮助。
本文将带你了解Android应用开发之android https解析,希望本文对大家学Android有所帮助。
HTTPS简介
HTTPS 全称 HTTP over TLS。TLS是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传输层安全协议。
对 HTTP 而言,安全传输层是透明不可见的,应用层仅仅当做使用普通的 Socket 一样使用 SSLSocket 。
TLS是基于 X.509 认证,他假定所有的数字证书都是由一个层次化的数字证书认证机构发出,即 CA。另外值得一提的是 TLS 是独立于 HTTP 的,任何应用层的协议都可以基于 TLS 建立安全的传输通道,如 SSH 协议。
HTTPS工作流程
Client Server
1.Request. 公钥(锁头)
2.Client校验证书(过期时间、颁发机构)
3.生成随机数,将随机数发送给服务端
4.C/S通过随机值当KEY加密数据传输
CA要解决的问题
通过公钥使用系统提供的验证策略
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");InputStream caInput = new BufferedInputStream(CC.getApplication().getAssets().open("aosCaGsorganizationvalsha2g2r1.crt"));Certificate ca=certificateFactory.generateCertificate(caInput);Logger.v("fasfasf", "ca=" + ((X509Certificate) ca).getSubjectDN());Logger.v("fasfasf", "key=" + ((X509Certificate) ca).getPublicKey()); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());keyStore.load(null);keyStore.setCertificateEntry("ca",ca); TrustManagerFactory tmf =TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmf.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null,tmf.getTrustManagers(), new SecureRandom());<em>sslSocketFactory </em>= sslContext.getSocketFactory();
if (<em>sslSocketFactory </em>!= null) { HttpsURLConnection.setDefaultSSLSocketFactory(<em>sslSocketFactory</em>); // HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { boolean isTrustDns= ConfigerHelper.getInstance().isTrustDns(hostname); Logger.v(<em>TAG</em>, "isTrustDns "+isTrustDns); return isTrustDns; }});// httpsURLConnection.setHostnameVerifier(new HostnameVerifier() {// @Override// public boolean verify(String hostname, SSLSession session) {// boolean isTrustDns= ConfigerHelper.getInstance().isTrustDns(hostname);// Logger.v(TAG, "isTrustDns "+isTrustDns);// return isTrustDns;// }// }); }
自定义验证策略
if (<em>sAgroupSslSocketFactory </em>== null) { try { TrustManager[] trustManagers=new TrustManager[]{ new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { //暂时不做证书校验 } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } }; SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null,trustManagers, new SecureRandom()); <em>sslSocketFactory </em>= sslContext.getSocketFactory(); } catch (Throwable e) { Logger.v("fasfasf",""+e.getMessage());// DebugLog.error(e.getMessage(), e); } }
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号