网络编程篇: 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证书有效。

相关推荐
gywl38 分钟前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
WTT00111 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
_oP_i2 小时前
HTTP 请求Media typetext/plain application/json text/json区别
网络协议·http·json
杨德杰2 小时前
QT网络(一):主机信息查询
网络·qt
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
yang_shengy2 小时前
【JavaEE】网络(6)
服务器·网络·http·https
OkeyProxy3 小时前
HTTP、HTTPS和SOCKS5代理協議
网络协议·https·云计算·代理服务器·海外ip代理
zquwei3 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
Aimin20224 小时前
路由器做WPAD、VPN、透明代理中之间一个
网络
群联云防护小杜4 小时前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡