【加密协议】SSL/TLS 协议工作流程

SSL/TLS

  • SSL/TLS加密协议,用于在客户端(如浏览器)和服务器(如网站)之间建立一个安全的、加密的通道,两者之间传输的数据是私密和完整性。

  • SSL - Secure Sockets Layer(安全套接字层),由于设计存在根本性弱点,现已普遍禁用

  • TLS - Transport Layer Security(传输层安全),以SSL为基础的新标准,新名称协议

  • 核心目标

  1. 保密性: 通过加密防止窃听,第三方无法读取破译传输数据(使用2个随机数参数生成的密钥加密数据)
  2. 完整性:通过消息确认码防止篡改,能检测出数据在传输中是否被篡改过
  3. 身份验证:通过数字证书验证服务器的身份,确保连接的是真正的目标服务器,也可以有选择的验证客户端的身份

TLS 的设计使得它可以为多种应用层协议提供安全支撑,工作时机原理相同, 如:

复制代码
HTTPS: 443
SMTPS: 465
IMAPS: 993
POP3S: 995
LDAPS: 636

局限性:服务可以使用任意端口,不能仅凭端口判断

一、协议名称演变

二、TLS协议工作原理

1. 工作时机

1.1 在网络模型中的层级
  • 位于经典TCP/IP模型的会话层
1.2 在通信流程中的位置
  • 在TCP三次握手之后

    建立TCP连接:客户端与服务器3次握手
    ------>
    TLS协议握手:在TCP连接之上,协商TLS版本、选择加密套件、进行身份验证、生成密钥等,建立"安全隧道"
    ------>
    应用层协议在"安全隧道"里面进行通信。此时http ->https

2. TLS握手流程

  • 以TLS 1.2 和 RSA密钥交换为例
2.1 第一步:Client Hello

客户端向服务器发起连接

2.1.1 客户端随机数:一个随机字符串,用于后续生成密钥。
  • 客户端与服务器通过双方的随机字符串,通过同一个密钥交换算法(非对称加密算法)生成非对称密钥
2.1.2 支持的加密套件列表
  • 客户端支持的加密算法、哈希算法、密钥交换算法组合的列表。
2.1.2.1 密钥交换算法
  • 非对称算法(ecdh: 椭圆曲线算法 )
  • 服务器与客户端都会使用
    客户端支持的算法:

客户端会选定其中一个算法,把自己生成的公钥放在这里

  • 服务器收到以后,会先看自己支不支持key_share客户端选中的这个算法, 如果不支持,就会在supported_group 里面挑一个自己也支持的算法,在server hello里面告诉客户端; 如果找不到上方都支持的,这次握手就会失败。
2.1.2.2 身份认证算法
  • 非对称加密算法(不可伪造、不可否认)

服务器端,使用算法生成的私钥和公钥:

  • 私钥用途:1.在握手阶段,客户端想要验证服务器的省份时,服务器用私钥对一些关键信息加密,客户端使用证书里面的公钥解密验证 2.数据传输阶段:服务器使用私钥对数据的hash值进行签名,客户端使用公钥验证签名,可验证数据时服务器发送的,没有被篡改。
  • 公钥的使用: 服务将公钥与域名信息、组织签名等信息发给证书颁发机构 , CA验证合法性以后会用自己的私钥对这些信息进行签名(客户使用CA的公钥验证签名,确认服务器的身份和公钥的合法性)生成证书。
  • 私钥就是服务器的"数字身份",证明"我就是我",以及保证数据的完整性(没有被篡改)和不可否认性(就是你发的)。
  • 支持的TLS版本
  • 服务端想访问的目的域名(同一个IP地址可能存在多个域名服务,知道了域名才能返回对应的证书和内容)
2.1.2.3 数据加密算法
  • 对称加密算法
    数据传输时,对它生成对称加密算法需要的会话密钥(预主密钥),最后双方都通过两个随机数和预主密钥,通过同一个算法(对称加密算法),计算出同一个会话密钥(对称密钥)。
2.1.2.4 消息认证码算法
  • 验证数据完整性和真实性,验证数据有没有被篡改
  • 带密钥的加密算法:摘要算法(MD5/SHA256等) + 共享密钥 , 比普通的摘要算法多了一层身份认证
2.2 第二步:Server Hello

服务器回应客户端

  • 选定的TLS版本
  • 服务器随机数:另一个随机字符串,用于后续生成密钥。
  • 选定的加密套件:从客户端提供的列表中选择一个双方都支持的、最安全的套件。

    各部分的算法解释
  • ECDHE :密钥交换算法
  • RSA: 身份认证签名
  • AES_128_GCM: 数字加密算法
  • SHA256: 消息认证码算法
2.3 第三步:Certificate

服务器将其数字证书发送给客户端。证书中包含了服务器的公钥。

2.4 第四:Server key Exchange
  • 如果密钥交换算法是ECDHE算法,服务器需要将自己生成对公钥发送给客户端
2.5 第五:Server Hello Done
  • 客户端收到服务端的公钥后,结合自己生成的私钥,计算出双方共享的会话密钥,这个会话密钥是后续实际数据加密的关键
2.6 第六步:证书验证

客户端验证服务器证书:

  • 检查证书是否由信任的 CA 签发(CA的公钥解密)
  • 检查证书是否在有效期内
  • 检查证书中的域名是否与正在访问的域名一致
2.7 第七步:Pre-master Secret 生成与加密
  • 客户端生成另一个随机字符串,称为 Pre-master Secret。然后,用服务器证书中的公钥对其进行加密,发送给服务器。
  • 不是必有的。密钥交换算法如果是RSA算法会有,但是ECDHE就不用。客户端与服务器会各自生成自己的密钥对。
2.8 第八步:服务器解密 Pre-master Secret
  • 服务器使用自己的私钥解密,得到 Pre-master Secret。
  • 至此,客户端和服务器都拥有了三个值:客户端随机数、服务器随机数和 Pre-master Secret。 双方使用相同的算法,根据这三个值独立计算出相同的主密钥。主密钥再被用于生成后续对称加密所需的会话密钥。
  • 不是必有的。密钥交换算法如果是RSA算法会有,但是ECDHE就不用。客户端与服务器会各自生成自己的密钥对。
2.9 第九步:切换至加密通信
  • 双方互相发送 Change Cipher Spec 消息后,便是告知对方:"从现在开始,我们之后所有的通信都将使用刚刚协商好的密钥和算法进行加密。"

2.10 第十步:Finished

双方发送一个加密的 Finished 消息。这个消息包含了之前所有握手消息的摘要。对方收到后,会验证摘要是否正确。这既确认了密钥的正确性,也确认了握手过程未被篡改

1.11 开始数据传输
  • 把上层应用的数据,(如http, tds, 邮件内容等),用前面协商好的密钥和要加算法惊醒加密,然后封装。不仅负责加密数据,还会给数据加上消息认证码,确包传输过程中数据不会被篡改。

三、TLS1.3 | TLS1.2

相关推荐
观望过往7 小时前
WebSocket 技术全解析:原理、应用与实现
网络·websocket·网络协议
阿珊和她的猫18 小时前
HTTP 状态码 304:未修改(Not Modified)的深度解析
网络协议·http·状态模式
jinxinyuuuus20 小时前
局域网文件传输:P2P架构中NAT穿透、打洞与数据安全协议
网络协议·架构·p2p
chuxinweihui21 小时前
应用层协议 HTTP
linux·服务器·网络·网络协议·http
chuxinweihui21 小时前
HTTP cookie 与 session
网络·网络协议·http
RocketJ21 小时前
TCP、Telepathy 和 HTTP 三者关系
网络协议·tcp/ip·http
默恋~微凉21 小时前
Shell(九)——HTTP与HTTPS协议
网络协议·http·https
fei_sun21 小时前
【复习】计网每日一题1121大题--HTTP/1.0、HTTP/1.1、持续连接、非持续连接、并行连接、Web、JPEG图像
网络·网络协议·http
Yan-英杰21 小时前
解决方案: CondaHTTPError: HTTP 000 CONNECTION FAILED for url
网络·网络协议·http