| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 【计算机网络】TLS四次握手过程 -> 正文阅读 |
|
[网络协议]【计算机网络】TLS四次握手过程 |
我们都知道HTTP是明文传输,所以存在窃听、篡改和伪装等风险。为了解决这些问题,https出现了,https在http的应用层和传输层之间增加了一个SSL/TLS层,建立连接时增加了TLS层的四次握手,实现了信息加密、报文校验和身份证书等功能。 今天,我们就来探讨一下,TLS层的信息加密是如何实现的。 https的信息加密是混合加密,也就是对称加密与非对称加密。双方通通信开始前要协商密钥,密钥协商时采用的是非对称加密,进行通信时使用的对称加密。 在密钥协商阶段主要用到以下几种算法:
RSA算法 TLS第一次握手 clientHello阶段,客户端向服务器发送请求,发送SSL/TLS版本,发送客户端支持的密码套件列表,然后会产生一个随机数(Client Random),发送给服务器,这是生成对称密钥的材料。 第一次握手客户端做的事: 客户端clientHello,客户端发送请求
TLS第二次握手 服务器会确定自己所支持的SSL/TLS版本,如果不支持,则直接关闭此次连接。在客户端发送来的密码套件中选择一套。生成一个随机数(Server Random) serverHello阶段,服务器响应客户端的请求,发送SSL/TLS版本,发送服务器选择的密码套件,发送随机数 密码套件:密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法 WITH单词前面只有一个单词RSA
发送数字证书 最后会发一个Server Hello Done的信息 第二次握手服务器做的事: 服务器接收到客户端请求,进行响应
客户端拿到服务器的响应后,会去验证证书的证实有效性 数字证书包含
数字证书的签发流程
客户端验证证书的流程
TLS的第三次握手 证书有效,客户端生成一个随机数(pre-master),用服务器的RSA公钥加密,然后通过Change Cipher Key Exchange消息发给服务器 服务器收到后,用私钥解密收到pre-master 到此阶段,客户端和服务器共享了三个数,Client Random、Server Random、pre-master,双方根据这三个数生成密钥 生成密钥后客户端再发一个Change Cipher Spec告诉服务器开始使用加密通话 最后在发送一个Encrypted HandShare Message消息,向服务器发送握手摘要,再加密一下,让服务器验证 第三次握手客户端做的事: 向服务器进行响应
TLS的第四次握手 服务器也是相同操作,发送Change Ciper Spec和Encrypted HandShare Message 服务器进行响应
RSA算法的缺陷 RSA算法最大的问题就是不支持前向保密,服务器的私钥一旦泄露,被第三方截获的TLS密文都会被破解 所以才有了DH算法 DH算法 客户端和服务器都各自产生一个随机数,生成一个私钥,然后根据公开的DH算法,算出自己的公钥,再把这个公钥通过TLS互换,这要有了自己的私钥和对方的公钥,就可以解密报文。 即时公钥被截取了,在不知道私钥的情况下也无法计算出密钥。 但是DH算法存在计算效率的问题,所以出现了ECDHE密钥协商算法 ECDHE算法 根据私钥的生成算法,有两种模式 DH算法(服务器的私钥是不变的)缺点是时间长了服务器的私钥有被破解的可能 DHE算法(目前常用)E(ephemeral)的意思就是临时性的 双方的私钥在每次密钥交换通信时都是临时生成的。但是这种算法的性能不佳,所以出现了ECDHE算法 ECDHE算法 在DHE算法的基础上,利用了ECC椭圆曲线的特性,可以优化计算公钥和最终会话密钥的计算量 ECDHE算法流程(实质就是通过椭圆曲线特性计算公钥)
此过程双方的私钥都是随机、临时生成的,不公开的。 ECDHE握手 TLS第一次握手 与RSA的握手流程大致相同 TLS第二次握手 服务器生成自己的随机数,在客户端的密码套件列表中选择一个密码套件 密码套件的信息有所改变(密钥协商算法+签名算法+对称算法+摘要算法)
接着服务器会发送数字证书 然后就会发送Server Key Exchange的消息(RSA算法是在TLS第四次握手才发动) 这个过程服务器做了三件事
为保证公钥不被篡改,服务器会使用RSA算法加密公钥 最后发送Server Hello Done信息 TLS第三次握手 过程大致相同 此阶段多了客户端会生成随机数作为自己的私钥,然后根据服务器给的信息生成椭圆曲线公钥,然后发送Client Key Exchange消息给服务器。 至此对方的公钥,自己的私钥和椭圆曲线的G点都已经得到 最终密钥是通过客户端随机数+服务器随机数 * 共享密钥确定的 TLS第四次握手 与RSA握手流程基本一致 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/8 11:24:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |