作家
登录

HTTPS 原理浅析及其在 Android 中的使用

作者: 来源: 2017-05-24 11:02:22 阅读 我要评论

(7) 戒备协定(alert protocol)

戒备的目标是以简单的通知机制告诉对端通信出现异常状况。它平日会携带close_notify异常,在连接封闭时应用,申报缺点。戒备异常简单,只有两个字段:

4.在Android中应用HTTPS的常见问题

(1) 办事器证书验证缺点

出现词攀类缺点平日可能由以下的三种原因导致:

  • (1) 揭橥办事器证书的CA未知;
  • (2) 办事器证书不是由CA签订的,而是自签订(比较常见);
  • (3) 办事器设备缺乏中心 CA;

当办事器的CA不被体系信赖时,就会产生 SSLHandshakeException。可能是购买的CA证书比较新,Android体系还未信赖,也可能是办事器应用的是自签名证书(这个在测试阶段经常碰到)。

解决词攀类问题常见的做法是:指定HttpsURLConnection信赖特定的CA集合。在本文的第5部分代码实现模块,会具体的讲解若何让Android应用信赖自签名证书集合或者跳过证书校验的环节。

(2) 域名验证掉败

SSL连接有两个关键环节。起首是验证证书是否来自值得信赖的来源,其次确保正在通信的办事器供给精确的证书。如不雅没有供给,平日会看到类似于下面的缺点:

出现词攀类问题的原因平日是因为办事器证书中设备的域名和客户端请求的域名不一致所导致的。

有两种解决筹划:

(1) 从新生成办事器的证书,用真实的域名信息;

代码如下:

  1. HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { 
  2.   @Override 
  3.   public boolean verify(String hostname, SSLSession session) { 
  4.     // 设置接收的域名集合 
  5.     if (hostname.equals(...))  { 
  6.          return true
  7.     } 
  8.   } 
  9. }; 
  10.  
  11. HttpsURLConnection.setDefaultHostnameVerifier(DO_NOT_VERIFY); 

(3) 客户端证书验证

SSL支撑办事端经由过程验证客户端的证书来确认客户端的身份。这种技巧与TrustManager的特点类似。本文将在第5部分代码实现模块,讲解若何让Android应用支撑客户端证书验证的方法。

(4) Android上TLS版本兼容问题

之前在接口联调的过程中,测试那边反馈过一个问题是在Android 4.4以下的体系出现HTTPS请求不成功而在4.4以上的体系上却正常的问题。响应的缺点如下:

  1. 03-09 09:21:38.427: W/System.err(2496): javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb7fa0620: Failure in SSL library, usually a protocol error 
  2.  
  3. 03-09 09:21:38.427: W/System.err(2496): error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0xa90e6990:0x00000000) 

按照官方文档的描述,Android体系对SSL协定的版本支撑如下:

也就是说,按官方的文档显示,在API 16+以上,TLS1.1和TLS1.2是默认开启的。然则实际上在API 20+以上才默认开启,4.4以下的版本是无法应用TLS1.1和TLS 1.2的,这也是Android体系的一个bug。

参照stackoverflow上的一些方法,比较好的一种解决筹划如下:

  1. SSLSocketFactory noSSLv3Factory; 
  2. if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { 
  3.     noSSLv3Factory = new TLSSocketFactory(mSSLContext.getSSLSocket().getSocketFactory()); 
  4. else { 
  5.     noSSLv3Factory = mSSLContext.getSSLSocket().getSocketFactory(); 

对于4.4以下的体系,应用自定义的TLSSocketFactory,开启对TLS1.1和TLS1.2的支撑,核心代码:


  推荐阅读

  国务院力促政务信息系统整合 政务云爆发在即

涉及体系范围之广泛尚属初次:本次整合共享涵盖了大年夜中心到处所的各个部分,纳入整合共享范畴的┞服务信息体系包含由当局投资扶植、当局与社会企业结合扶植、当局向社会购大班事或须要当局资金运行保护的,用于支>>>详细阅读


本文标题:HTTPS 原理浅析及其在 Android 中的使用

地址:http://www.17bianji.com/lsqh/35390.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)