说下SSL/TLS四次握手过程?

参考自:
SSL/TLS四次握手过程是怎么样的?
HTTPS、SSL、TLS三者之间的联系和区别

一.SSL/TLS 简介

SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层,用于解决 HTTP 在传输数据时使用明文而导致的不安全问题。

  • SSL 是 HTTP 之下,TCP 之上的一个协议层,是基于 HTTP 标准并对 TCP 传输数据时进行加密,所以 HTTPS 可以想成是 HTTP+SSL 的简称。

  • HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信。

  • TLS 可以简单理解为 SSL 的升级版。在SSL更新到3.0时,IETF 对 SSL3.0 进行了标准化,标准化后的更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说 TLS 就是SSL的新版本3.1,并同时发布"RFC2246-TLS加密协议详解",

    SSL/TLS

二、SSL/TLS四次握手过程
1. 客户端发出连接请求

客户端先向服务器发出加密通信的 ClientHello 请求。其向服务器提供下面信息:

  • 支持的协议版本,比如 TLS1.0 版本;
  • 支持的加密方法,比如 RSA 公钥加密;
  • 一个客户端生成的随机数(client random), 稍后用于生成对话密钥(session key)。随机数(client random) 客户端会保存,同时需要传送给服务端,随机数(client random) 需要跟服务端产生的随机数结合起来产生后面要讲到的 Master Secret。
2. 服务器回应

服务器收到客户端请求后,向客户端发出回应,这叫做 Serverhello。此步服务器主要做三件事:

  • 确认使用的加密通信协议版本,比如TLS1.00版本。如果游览器与服务器支持的版本不一致,服务器关闭加密通信;
  • 确认使用的加密方法(客户端所支持),比如RSA公钥加密;
  • 将服务器证书、非对称加密的公钥,以及**一个随机数(Server random)**发送给客户端
3. 客户端回应
(1) 客户端收到服务器回应以后,首先验证服务器证书

验证手段就是执行如下三种检查:

  • 检查证书是否已过期;
  • 检查证书中的域名与实际域名是否一致;
  • 检查证书是否是可信机构颁布的;

如果,上述过程中有任何一个环节发现问题,那么浏览器就会向访问者显示一个警告,由其选择是否还要继续通信。

(2) 验证完证书后处理

如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串新的随机数(Premaster secret ),并用证书中提供的公钥加密,发送给服务器。

此时,浏览器会根据前三次握手中的三个随机数:

  • Client random
  • Server random
  • Premaster secret

通过一定的算法来生成 "会话密钥" (Session Key) ,这个会话密钥就是接下来双方进行对称加密解密使用的密钥!

4. 服务端回应

服务端收到客户端的回复,利用已知的加密解密方式进行解密,服务器收到客户端的第三个随机数( Premaster secret) 之后,使用同样的算法计算出 "会话密钥" (Session Key)。

5. 握手完成后加密通信

整个握手阶段全部结束后,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用 "会话密钥" 加密内容。(非对称加密解密将不再使用,接下来完全由对称加密接手了,因为密钥已经安全的传送给了通信的双方)

三. 总结

SSL/TLS四次握手

  1. 客户端请求建立 SSL 链接,并向服务端发送一个随机数--Client random 和客户端支持的加密方法,比如RSA公钥加密,此时是明文传输。
  2. 服务端回复一种客户端支持的加密方法、一个随机数--Server random、授信的服务器证书和非对称加密的公钥。
  3. 客户端收到服务端的回复后利用服务端的公钥,加上新的随机数--Premaster secret 通过服务端下发的公钥及加密方法进行加密,发送给服务器。
  4. 服务端收到客户端的回复,利用已知的加解密方式进行解密,同时利用Client random、Server random和Premaster secret通过一定的算法生成HTTP链接数据传输的对称加密key -- session key。
相关推荐
白帽黑客沐瑶6 小时前
【网络安全就业】信息安全专业的就业前景(非常详细)零基础入门到精通,收藏这篇就够了
网络·安全·web安全·计算机·程序员·编程·网络安全就业
树码小子7 小时前
Java网络编程:(socket API编程:TCP协议的 socket API -- 回显程序的服务器端程序的编写)
java·网络·tcp/ip
绿箭柠檬茶8 小时前
Ubuntu 服务器配置转发网络访问
服务器·网络·ubuntu
FPGA_Linuxer8 小时前
FPGA 40 DAC线缆和光模块带光纤实现40G UDP差异
网络协议·fpga开发·udp
real 18 小时前
传输层协议UDP
网络·网络协议·udp
路由侠内网穿透10 小时前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
喵手13 小时前
玩转Java网络编程:基于Socket的服务器和客户端开发!
java·服务器·网络
徐子元竟然被占了!!14 小时前
实验-基本ACL
网络
ftpeak15 小时前
从零开始使用 axum-server 构建 HTTP/HTTPS 服务
网络·http·https·rust·web·web app
LabVIEW开发16 小时前
LabVIEW气体污染无线监测
网络·labview·labview知识·labview功能·labview程序