【网络协议】【http】【https】AES-TLS1.2

【网络协议】【http】【https】AES-TLS1.2

https并不是一个协议 而是在传输层之间添加了SSL/TLS协议TLS

TLS 协议用于应用层协议(如 HTTP)和传输层(如 TCP)之间,增加了一层安全性来解决 HTTP 存在的问题,HTTPS 就是使用 TLS 加密的 HTTP,确保数据在客户端和服务器之间的安全传输。

(这几个后面详细说一下)

TLS解决了HTTP存在的问题 就解决方式
明文传输数据存在窃听风险 混合加密
无法证明数据完整性,数据可能被篡改。 数字签名+摘要
验证数据传输者身份 CA数字证书

TLS 的主要特点:

加密:TLS 确保数据在传输过程中被加密 ,防止被未授权的第三方窃取或篡改。

数据完整性:TLS 使用数字签名摘要 (哈希算法)来验证数据在传输过程中未被篡改。

身份认证:TLS 使用证书认证机制,保证连接的服务器是合法 的,避免中间人攻击

TLS 握手过程:建立安全连接的过程涉及多个步骤:

客户端向服务器发送支持的 TLS 版本和密码套件(加密算法)。

服务器响应客户端,选择一种密码套件并返回自己的公钥,通常会嵌入在由 CA(证书授权中心)签名的证书中,客户端用这个公钥来验证服务器身份,并交换加密密钥。

客户端和服务器进一步交换加密消息,建立共享的密钥,这个密钥会在会话中用来加密通信。

握手的阶段:

在不同版本的 TLS 中,握手过程的步骤数量不同:

TLS 1.2 通常包含多个步骤,过程较为复杂。

TLS 1.3 通过简化握手过程,减少了握手的步骤,使其更加高效,只有两个主要阶段。

安全元素:

基于AES的TLS1.2

1.客户端发起请求

首先,客户端向服务器发送一个 "ClientHello " 消息,这个消息中包括:
TLS 版本 :客户端支持的最大 TLS 版本。
密码套件密钥交换算法(非对称加密) +签名算法(非对称加密且私钥加密公钥解密) +对称加密算法(后续数据传输) +摘要算法(hash)
客户端随机数 :一个由客户端生成的随机数,用于后续生成会话密钥。

2.服务器响应

服务器收到 "ClientHello" 后,会返回一个 "ServerHello " 消息,其中包括:
TLS 版本 :服务器选择的 TLS 版本。
密码套件密钥交换算法+签名算法+对称加密算法+摘要算法
服务器随机数 :服务器生成的随机数。
服务器证书与签名 :服务器随后会发送自己的证书(通常是由一个受信任的证书颁发机构 CA 签名的),这个证书中包含了服务器的公钥 证明服务器的身份并,服务器还会向客户端发送数字签名确保数据完整性

客户端验证服务器:客户端使用 CA 的公钥来验证服务器证书的有效性,并检查数字签名

(服务器会使用其私钥对一些重要的 TLS 握手消息(如 "ServerHello")进行数字签名。)客户端收到这些签名后,会使用服务器证书 中的公钥 解密签名,得到哈希值(TLS 握手消息先摘要 再使用私钥加密 此时使用公钥解密 )。

客户端重新计算收到的消息的哈希值(摘要),并与解密后的哈希值进行比对。如果两个哈希值一致,说明消息在传输过程中没有被修改,确保了数据的完整性。(这里就是验证数据完整性 数字签名+摘要)

3.客户端

生成一个"预主密钥 ",并使用服务器的公钥 对其进行加密,然后发送给服务器。生成会话密钥。这个会话密钥将用于加密接下来的通信。

4.服务器

解密这个预主密钥,生成会话密钥:客户端和服务器使用之前交换的随机数(客户端随机数和服务器随机数)以及预主密钥来生成会话密钥。这个会话密钥将用于加密接下来的通信。

如何验证CA证书可信

首先,客户端会从服务器获取证书链。证书链通常包括服务器证书、一个或多个中间证书。

客户端首先会检查服务器证书的有效性,包括证书的有效期、证书的颁发机构等。

然后,客户端会使用 中间证书的公钥 来验证服务器证书的签名(如上图:证书签名验证)。

接着,客户端会检查中间证书的有效性,并使用根证书的公钥来验证中间证书的签名。

最后,客户端会检查根证书的有效性。由于根证书是自我签名的,所以客户端会使用根证书的公钥来验证根证书的签名。

如果所有的证书都通过了验证,那么证书链就被认为是有效的。如果任何一个证书没有通过验证,那么证书链就被认为是无效的。

部分转自https://i-blog.csdnimg.cn/direct/ab9d5a5d087f42a18da1453774c0032e.png

相关推荐
fanged44 分钟前
LDD3学习7--硬件接口I/O端口(以short为例)
linux
学而知不足~1 小时前
Linux测试处理fps为30、1920*1080、一分钟的视频性能
linux·音视频
难以怀瑾1 小时前
测试工程师的linux 命令学习(持续更新中)
linux·运维·服务器
m0_748252601 小时前
【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题
linux·运维·golang
兮动人2 小时前
Linux 下配置 Golang 环境
linux·运维·golang
bank_dreamer2 小时前
linux Debian包管理器apt安装软件包由于依赖关系安装失败解决方法
linux·运维·debian
诸葛百家2 小时前
linux下springboot项目nohup日志或tomcat日志切割处理方案
linux·spring boot·tomcat
s_little_monster2 小时前
【Linux】打破Linux神秘的面纱
linux·运维·经验分享·笔记·学习·学习方法
傻啦嘿哟3 小时前
HTTPS与HTTP:区别及安全性对比
网络协议·http·https