OkHttp网络框架深入理解-SSL握手与加密

news2024/11/17 0:17:26

OkHttp简介

由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。

特点:

  • 支持HTTP/2并允许对同一主机的所有请求共享一个套接字
  • 通过连接池,减少了请求延迟
  • 默认通过GZip压缩数据
  • 响应缓存,避免了重复的网络请求
  • 请求失败自动重试主机的其他ip,自动重定向

什么是SSL

SSL其实就是Secure Scoket Layer安全套接层,提供了一种为网络通信提供安全以及数据完整性的安全协议,再传输层对网络进行加密。

  • SSL记录协议: 为高层协议提供安全封装,压缩,加密等基本功能
  • SSL握手协议:用与再数据传输开始前进行通信双方的身份验证、加密算法协商、交换秘钥

https安全的http协议是建立在SSL层或TLS层上的http协议,在普通的传输层和http应用层之间插入SSL或TLS安全层。

https使用非对称加密进行加密秘钥协商,采用对称加密方式对报文进行加密处理以保证安全性

https不同于http,使用443端口作为默认端口,建立TCP连接后,会初始化SSL层,对加密参数进行沟通并交换秘钥。

非对称加密

数字签名技术

数字签名技术是为了证明数据的完整性,未经过的三方修改(发送者身份的真实性);主要包括两个方面:摘要算法和加密。

1.摘要算法通过哈希处理将原始信息转换成固定长度的序列,确保输入到输出的一一映射,原始信息的变化将导致输出结果的变化,常见的有MD5,SHA-1,SHA-256等。

2.加密采用非对称加密,私钥加密保证加密后的摘要信息无法更改

数字签名流程:

1、对原始信息进行摘要算法处理,得到摘要信息,使用私钥对摘要信息进行加密,生成签名。

2、签名与原始信息合并成最终签名文件发布

3、接收方使用公钥将签名文件中的数字签名进行解密

4、对原始信息进行摘要算法处理

5、对比3、4步的结果,一致说明文件未被更改;

数字证书

1.数字证书包含有公钥,证书有效期,发证机构等信息;数字证书需要向CA机构申请,获取到的数字证书是经过签名处理的。

  1. CA机构的根证书是没有经过签名的数字证书,可以直接拿到其公钥。

  2. CA机构颁发的次级证书已经使用私钥进行了签名处理,可以使用CA根证书中的公钥进行解密获得次级证书中的公钥。能正常解密才能说明次级证书的合法性。

  3. 客户端持有CA根证书,在服务端发送申请到的数字证书给客户端后,客户端使用根证书公钥解密处理,验证服务端证书。

SSL握手过程

ssl握手过程完成加密算法的协商和加密秘钥的确定,双方数字证书的认证工作。

具体流程如下:

  • 1.客户端发起连接请求,发送客户端支持的SSL版本号,加密算法(密码套件/Cipher Suites)列表,随机数给服务端
  • 密码套件格式:每个套件都以“SSL”开头,紧跟着的是密钥交换算法。用“With”这个词把密钥交换算法、加密算法、散列算法分开,例如:SSL_DHE_RSA_WITH_DES_CBC_SHA, 表示把DHE_RSA(带有RSA数字签名的暂时Diffie-HellMan)定义为密钥交换算法;把DES_CBC定义为加密算法;把SHA定义为散列算法。
  • 2.服务端在客户端支持的加密算法中选择一组,和服务端证书(包含公钥)、一个随机数一起发给客户端
  • 3.客户端对服务端的证书进行验证并获取公钥,产生一个称作pre_master_secret的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加/解密),并将加密后的信息发送给服务器;
  • 4.客户端与服务器端根据pre_master_secret以及客户端与服务器的随机数值(第1,2步中的随机数)独立计算出加密和MAC密钥。

这里有三个秘钥:服务端证书传递的公钥,隐含的服务端持有的私钥,最终的加密秘钥;

公钥和私钥是非对称加密算法的秘钥,主要用于服务端和客户端协商生成最终的加密秘钥,保证协商过程的保密性

最终生成的加密秘钥匙对称加密算法的秘钥,主要用于后面数据交换的加密

pre_master_secret是客户端生成的一段随机码用于生成最终的加密秘钥(使用秘钥交换算法)。

以上流程是单向认证流程即只有客户端对服务端进行认证

本文是对okhttp网络框架中的SSL握手与加密的简单介绍与理解,更多有关可以前往《okhttp网络框架笔记》学习进阶跟多技术板块,可以点击查看详细类目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1132984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现

简介 JAX-WS(Java API for XML-Based Web Services),是创建web服务的Java编程接口,特别是SOAP服务。是Java XML编程接口之一,是Java SE 和Java EE 平台的一部分。 JAX-WS 2.0 规范是代替JAX-RPC 1.0的下一代Web服务AP…

红蓝对抗——信息收集

文章目录 1. 基础篇1.1 企业架构收集1.2 ICP 备案查询1.3 DNS 解析记录1.4 网络汇测1.5 C段收集1.6 证书收集1.7 接口收集1.8 APK信息收集1.9 公众号信息收集1.10 站点敏感信息收集1.11 供应链/业务链收集1.12 人员信息收集1.13 Google1.14 github信息收集 2. 进阶篇2.1 子域名…

C++ 异常和错误处理机制:如何使您的程序更加稳定和可靠

在C编程中,异常处理和错误处理机制是非常重要的。它们可以帮助程序员有效地处理运行时错误和异常情况。本文将介绍C中的异常处理和错误处理机制。 什么是异常处理? 异常处理是指在程序执行过程中发生异常或错误时,程序能够捕获并处理这些异常…

【打靶】vulhub打靶系列(一)—小白视野的渗透测试

主机探测 arpscan arp-scan -l 另一种方法arping for i in $(seq 1 200); do sudo arping -c 1 192.168.56.$i; done 注意这个必须是root权限 ​ 端口探测 nmap nmap -p- -sV -T4 192.168.56.104 发现8080端口 web测试 访问下web页面 1、通过逻辑点绕过 发送到xia_sq…

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…

Redis数据类型——set类型数据介绍及操作

1.set类型介绍及基本操作 2.set类型数据的扩展操作

2023年5个美国代理IP推荐,最佳代理花落谁家?

美国代理IP指的是代理服务器位于美国的IP地址,对于跨境业务来说,这些代理IP地址可以用于隐藏用户的真实IP地址,将其网络流量路由通过美国的服务器,以实现一些特定的目的。由于近年来,面向美国市场的跨境商家越来越多&a…

Spring无法加载静态属性和SpringBoot单元测试指定加载配置文件

一、Spring无法加载静态属性,怎么解决? Spring主要用于管理和注入Bean(对象)的实例属性,而不是静态属性。静态属性属于类本身,而不是类的实例,因此Spring的依赖注入机制不会处理它们。 看图&a…

力扣:138. 随机链表的复制(Python3)

题目: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点…

【Linux】Centos yum源替换

YUM是基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 CentOS 8操作系统版本结束了生命周期(EOL)&#xff0…

设备保修小程序开发制作方案

设备保修小程序定位为一款专业的设备保修服务平台,旨在为用户提供便捷、高效、优质的设备保修服务。 一、用户需求 用户需要快速了解设备的保修政策和流程。 用户需要方便地提交保修申请和查询保修进度。 用户需要及时获取设备的维修信息和维修结果。 用户需要对设…

【鸿蒙软件开发】自定义弹窗(CustomDialog)

文章目录 前言一、创建自己第一个自定义弹窗1.1 创建自定义弹窗1.2 创建构造器,与装饰器呼应相连CustomDialogController参数详解函数介绍open() close() 1.3 点击与onClick事件绑定的组件使弹窗弹出 二、示例代码总结 前言 自定义弹窗(CustomDialog&am…

Pycharm 中 py 文件预设 文件头部信息

文章目录 一、设置模板步骤:二、其他 一、设置模板步骤: “文件File–设置Settings–编辑器Editor–File and Code Templates- Python Script” 里面设置模板 二、其他 其他可用的预定义文件模板变量为: $ {PROJECT_NAME} - 当前项目的名称…

语雀暂别8小时:探究P0级故障幕后原因及补偿策略揭晓!

作者:苍何,CSDN 2023 年 实力新星,前大厂高级 Java 工程师,阿里云专家博主,土木转码,现任部门技术 leader,专注于互联网技术分享,职场经验分享。 🔥热门文章推荐&#xf…

攻防世界-web-FlatScience

1. 题目描述 打开链接,看到如下界面 界面上的链接都点击下,发现都是一些英文论文 这些暂时是我们从界面上能发现的全部信息了 2. 思路分析 && 解题过程 2.1 先将网站使用nikto命令扫描一下 我们发现除了显式的界面外,还有两个隐藏…

基于MATLAB的Simulink搭建一阶低通滤波器

一、一阶低通滤波的原理 式子中的α作为滤波系数,X ( n ) 为本次的采样值,Y ( n − 1 ) 为上次滤波的输出值,Y ( n ) 为本次滤波后的输出值 一阶低通滤波器是一种常用的信号处理算法,用于去除高频噪声和平滑信号。其基本原理是通过…

4.2 QPainter的绘图接口介绍(上)

4.2 QPainter的接口介绍(上) 上一篇文章中讲述了在哪里绘图,怎么开始绘制,怎么跟绘制设备绑定、解绑等基础知识,今天就来点实操的,下面坐好了,开始阅读吧。 下图是《C++ GUI Programming with Qt 4》这本书中列出的关于QPainter常用的画图方法,基本上都是以draw开头,…

用libuv实现遍历文件系统

熟悉的陌生人 Node.js可能无人不知无人不晓,但Node.js底层实现libuv,恐怕认识的同学就不多了。 libuv是一个跨平台的高性能的异步I/O库,也是是一个网络I/O扩展库,是一个高性能事件驱动的程序库,封装了Windows和Unix平…

【C++】继承 ⑩ ( 继承机制中的 static 静态成员 | 子类中访问父类静态成员的方法 )

文章目录 一、继承机制中派生类中的 static 关键字1、子类继承父类静态成员2、父类静态成员访问控制权限的改变3、子类如何访问父类静态成员4、静态成员使用要点 二、完整代码示例 一、继承机制中派生类中的 static 关键字 1、子类继承父类静态成员 子类继承父类静态成员 : 父类…