网络编程篇: HTTPS协议

一.前置知识

早期很多公司刚起步的时候,使用的应用层协议都是HTTP,而HTTP无论是用GET方法还是POST方法传参,都是没有经过任何加密的,因此早期很多的信息都是可以通过抓包工具抓到的。 为了解决这个问题,于是出现了HTTPS协议,HTTPS实际就是在应用层和传输层协议之间加了一层ssl加密解密层,这层加密层本身也是属于应用层的,它会对要进行网络通信的数据加密。HTTPS在交付数据时先把数据交给加密层,由加密层对数据加密后再交给传输层。 当然,通信双方使用的应用层协议必须是一样的,因此对端的应用层也必须使用HTTPS,当对端的传输层收到数据后,会先将数据交给加密解密层,由加密解密层对数据进行解密后再将数据交给应用层。

二. 对称加密和非对称加密

明文是什么?密文是什么?密钥又是什么?

明文是为经加密层加密过的数据,密文是经加密解密层用密钥加密过的数据,密钥就是用于加密和解密数据的东西。密钥可以是一串数字、字母或符号的组合,也可以是一个数学函数或算法。 举个例子:主机A想给主机B发送 7 这个数字,双方约定对要发送的数据 ^ 5, 7^5=2,2就是密文,^5就是密钥。

对称加密:加密和解密用的都是同一个密钥。 特点:对称加密因为密钥是公开的,所以不安全但是正因为只有一个密钥(公钥)所以计算速度快。 非对称加密:加密和解密是用的不同的密钥。特点:相较于对称加密更加的安全,加密用公钥,解密用私钥。只有私钥才能解密经对应的公钥加密过的数据。

三. HTTPS的工作流程及其周边概念

什么是数据指针(数据摘要)?

将正文数据经hash函数进行运算,生成一串固定长度的数字就是数据摘要,常见的加密算法MD5,生成的固定长度数字具有唯一性,如果修改了正文数据,则这串数字会重新生成。HTTP的Session生成的ID就是使用这种方法。

数据指纹(数据摘要)的应用场景?

秒传,在上传数据在百度网盘时,有几率会发生秒传的例子,数据直接上传好了,这是因为在数据要上传到百度网盘时,百度网盘服务端会对上传到数据进行生成数据摘要,然后去自己的库中看看有没有数据摘要是一致的数据,如果有就不用上传了,创建一个软链接就可以了。

CA证书

CA 证书,也叫数字证书,是由权威的证书颁发机构签发的电子文档,用于在网络通信中验证身份并建立加密连接。

  1. 公钥:用于加密数据或验证数字签名,CA 的公钥。
  2. 持有者信息:包括证书所有者的名称、组织单位等信息。
  3. 证书颁发机构的信息:包括 CA 的名称、数字签名等。
  4. 有效期:证书的有效期,包括开始日期和结束日期。
  5. 证书序列号:证书的唯一标识符。
  6. 数字签名:由 CA 对证书内容进行的数字签名,用于确保证书的完整性和真实性。

数据签名

将用户提交的数据经hash算法形成数据指纹,再用CA机构的私钥加密就生成了数据签名。

经多年发展,HTTPS最终选用了非对称加密+对称加密+CA证书认证的工作方式。

上图很清晰的说明了HTTPS的验证过程: 1.服务端要先向CA机构申请CA证书,要填写申请人,域名,公钥等信息后,会生成一个.csr文件,这个文件内的内容最终会加到CA证书上。将scr文将提交给CA机构。 2. CA机构根据发来的csr文件生成对应的CA证书,会生成两个东西,一个是CA证书,一个私钥。生成的私钥是属于证书颁发机构(CA)自身的私钥。这个私钥用于对由该 CA 签发的数字证书进行生成数字签名。 3.CA机构颁发CA证书给服务端。 4.服务端在握手的开始阶段,会向客户端发送自己的数字证书,其中包含了服务端的公钥。 5.客户端收到服务端的证书后,会验证证书的有效性。这包括检查证书链是否有效,是否由受信任的 CA 签发等。如果证书验证通过,客户端生成一个随机的对称密钥,用于加密和解密后续通信的数据。客户端使用服务端证书中的公钥,对生成的对称密钥进行加密,并将加密后的密钥发送给服务端。 6.服务端收到客户端发送的加密的对称密钥后,使用自己的私钥进行解密,从而获取客户端生成的对称密钥。至此,客户端和服务端都具有相同的对称密钥。这个对称密钥将用于加密和解密后续的通信数据。

客户端怎么验证CA证书是否有效?

CA证书上由数据签名,用服务端的公钥对数据签名进行解密就能得到一个数据指纹(数据摘要),用hash算法对CA证书正文内容作计算,得到一个数据指纹(数据摘要),两个数据摘要做对比,如果一致就说明CA证书有效。

相关推荐
LlNingyu6 分钟前
简单流量分析,串通Wireshark基本使用
网络·wireshark·流量分析
茉莉玫瑰花茶11 分钟前
HTTPS 协议原理
网络协议·https·iphone
byoass31 分钟前
自动化任务系列之六:自动整理文件——按时间/关键字分类归档实战
运维·网络·安全·自动化·云计算
skilllite作者41 分钟前
OpenClaw 网络数据采集新手入门指南
网络
王大傻092842 分钟前
yakit 无法拦截127.0.0.0 数据包的解决方案
网络·安全
zhangzeyuaaa1 小时前
深入理解 Python GIL:从机制到释放时机
java·网络·python
枷锁—sha1 小时前
【CTFshow-pwn系列】03_栈溢出【pwn 072】详解:无字符串环境下的多级 Ret2Syscall 与 BSS 段注入
服务器·网络·汇编·笔记·安全·网络安全
zhangzeyuaaa1 小时前
深入理解 Python 进程间通信:Queue 与 Pipe 实战解析
网络·python·中间件
桌面运维家2 小时前
Windows11 USB无线键鼠飘移故障排查与保养指南
网络
Rust研习社2 小时前
使用 Tonic 构建高性能异步 gRPC 服务
开发语言·网络·后端·http·rust