### Android SSL证书验证原理 #### 一、概览 在Android平台上实现安全的数据传输通常依赖于SSL(Secure Sockets Layer)或其后续版本TLS(Transport Layer Security),它们为客户端和服务端之间的通信提供加密保护。本篇文章将深入探讨Android平台上的SSL证书验证原理,包括SSL证书交换流程、SSL握手与验证过程以及数字证书、公钥和密钥的管理。 #### 二、SSL证书交换流程 当Android应用尝试访问一个HTTPS站点时,会发起一个SSL握手过程。这个过程主要包括以下几个步骤: 1. **创建HTTPS链接**:应用首先需要建立一个HTTPS连接,用于下载HTML文件及其中包含的资源,如图片等。这一过程通过调用`Network.requestURL`接口实现。具体来说,该接口会创建一系列对象(如`Request`、`RequestHandle`、`RequestQueue`和`Connection`对象),并最终调用`RequestHandle.processRequest`方法完成请求。在整个过程中,网络层并不关心连接的具体类型,只负责处理请求。 2. **SSL握手与验证**:一旦建立了HTTPS连接,就会开始SSL握手过程。此过程的主要目的是验证通信双方的身份,并协商加密算法和密钥。在Android中,`HttpsConnection`类负责处理HTTPS协议,而`SSLSocket`及其相关类则实现SSL协议。`HttpsConnection`可以通过调用SocketFactory接口启动SSL握手过程。这一过程涉及多个类,包括`SSLSocket`、`OpenSSLSocketImpl`、`SSLParameters`、`SSLSession`、`OpenSSLSocketFactoryImpl`、`OpenSSLSessionImpl`和`SSLSessionContext`。其中,`OpenSSLSocketImpl`通过JNI调用OpenSSL库中的API进行握手操作,而握手信息是在`SocketImpl`对象上进行传输的。握手完成后,`SSLSession`类封装了SSL会话信息,存储了SSL握手的结果,而`SSLSessionContext`则相当于`SSLSession`的缓存池。 3. **数字证书、公钥与密钥**:Android系统使用OpenSSL库交换证书和协商加密算法,但实际的证书验证并非由OpenSSL库完成。系统会将自身的证书和私钥存储在密钥仓库中,在进行SSL握手之前,将这些信息放入SSL_CTX变量中。握手完成后,系统从`SSLSession`中获取服务器的证书,并使用可信密钥仓库来验证该证书的可信性。此外,还需要确保将底层证书正确映射为`X509Certificate`对象。 #### 三、细节解析 1. **创建HTTPS链接**:这一过程的关键在于`Network.requestURL`接口的使用,它负责构建请求对象并最终触发请求。值得注意的是,虽然AndroidWebKit不关心具体的协议类型,但内部实现中确实涉及到了不同类型的连接建立,如HTTP和HTTPS。 2. **SSL握手与验证**:握手过程中涉及的类较多,每个类都扮演着特定的角色。例如,`OpenSSLSocketImpl`负责与OpenSSL库交互,而`SSLSession`则负责存储握手的结果。特别地,身份验证是由`checkServerTrusted`函数实现的,而非OpenSSL库本身。 3. **数字证书、公钥与密钥**:这一环节涉及到密钥仓库的使用以及证书验证的过程。Android系统使用自己的密钥仓库来存储证书和私钥,并在此基础上完成证书的验证工作。对于集成第三方密钥管理和验证机制的应用而言,需要将第三方提供的密钥和证书正确地存储到Android的密钥仓库中,并将第三方提供的验证算法整合进系统的信任管理体系中。 Android平台上的SSL证书验证是一个复杂且重要的过程,涉及到了多个层面的技术细节。通过对这一过程的深入理解,开发者能够更好地保障应用的安全性和稳定性。
剩余6页未读,继续阅读
- Acusp2016-10-21不错,图片很清楚!
- 粉丝: 413
- 资源: 28
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HengCe-18900-2024-2030全球与中国eMMC和UFS市场现状及未来发展趋势-样本.docx
- 2024第十四届APMCM亚太地区-C题完整论文.pdf
- HengCe-18900-2024-2030中国硬碳负极材料市场现状研究分析与发展前景预测报告-样本.docx
- PHP面向对象与设计模式
- HengCe-2024-2030全球与中国掩模基板市场现状及未来发展趋势-样本
- CSS3制作的聚光灯下倒影文字选装动画特效代码.zip
- mongodb笔记和资料
- 工具变量2022-2004年中国省级市场分割指数数据.xlsx
- stm32f1 编写MPU6050程序代码
- js+jquery实现经典推箱子游戏