码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 计算机网络 | 05.[HTTP] SSL/TLS握手过程


    文章目录

    • 1. SSL/TLS 四次握手
      • 1.1. 第一次握手
      • 1.2. 第二次握手
      • 1.3. 第三次握手
      • 1.4. 第四次握手
    • 2. RSA握手
      • 2.1. RSA握手流程
      • 2.2. RSA握手的缺陷
    • 3.ECDHE握手
      • 3.1. ECDHE握手的特点
    • 参考资料

    1. SSL/TLS 四次握手

    HTTPS是什么?加密原理和证书。SSL/TLS握手过程 - 空降06:49

    image-20220802180223510

    TLS四次握手的最终目的是通过安全的方式生成「会话秘钥」。

    「会话秘钥」的生成需要以三个随机数 Client Random、Server Random、pre-master key 作为材料,再用商定好的加密算法计算得到。整个流程客户端一共发出4个消息,收到6个消息。

    • 第一次、第二次握手中,双方各自生成 随机数 ,确定 TLS版本 和 加密算法,同时服务端将 证书 发给客户端;
    • 客户端验证证书后开始第三次握手,客户端生成 预主密钥,并通过证书中的 公钥 加密后发送给服务端,双方根据两个随机数和预主密钥生成 会话密钥,握手结束。

    1.1. 第一次握手

    客户端发起 [ClientHello] 消息,该消息包含:

    • 客户端支持的 SSL/TLS 协议版本(如"TSL1.2");

    • 客户端生成的随机数 Client Random;

    • 客户端支持的密码套件列表(如"RSA加密算法")。

    1.2. 第二次握手

    服务器收到客户端发起的消息后,向客户端发出 [ServerHello] 消息,其中包含:

    • 本次加密通信确定使用的 SSL/TSL 协议版本;

    • 服务端生成的随机数 Server Random;

    • 本次加密通信确定使用的加密算法;

    随后,服务端又连续发送三个消息:

    (1) [Certificate] 内含服务器证书;

    (2) [Server Key Exchange] 内含服务器公钥;

    (3) [Server Hello Done] 告知客户端响应结束。

    1.3. 第三次握手

    客户端收到消息后,会使用内置的「CA公钥」解密数字证书,验证数字证书的真伪。当确认数字证书没有被伪造,就会生成 pre-master key ,并结合先前生成的两个随机数,根据加密算法计算出「会话秘钥」。随后客户端连续发起三个消息:

    (1) [Client Key Exchange] 内含客户端生成的 pre-master key,会被「服务器的公钥」加密;

    (2) [Change Ciper Spec] 告知服务端随后的消息都改用「会话秘钥」加密通信;

    (3) [Encrypted Handshake Message] 告知服务端握手结束,并将之前所有数据用哈希函数计算哈希值,再使用「会话秘钥」加密,交给服务端验证握手过程中信息是否有被篡改。

    1.4. 第四次握手

    服务端收到消息后,利用已有的两个随机数和 pre-master key,根据加密算法计算出「会话秘钥」,并连续发起两个消息:

    (1) [Change Chipher Spec] 告知客户端随后的消息都改用「会话秘钥」加密通信;

    (2) [Encrypted Handshake Message] 告知客户端握手结束,并将之前所有数据用哈希函数计算哈希值,再使用「会话秘钥」加密,交给客户端验证握手过程中信息是否有被篡改。

    2. RSA握手

    2.1. RSA握手流程

    与上文提到的完全一致,其中 pre-master key 是客户端随机生成的一个随机数。

    2.2. RSA握手的缺陷

    不支持前向保密:由于最后的 pre-master key 是客户端使用公钥加密后传递给服务端的,服务端再使用私钥解密,就能重新得到 pre-master key。而一旦服务器的私钥被泄露,过去截获的所有TLS密文都将被破解。

    3.ECDHE握手

    3.1. ECDHE握手的特点

    支持前向保密:由于每次通信使用的 私钥 都是 不同的,因此某一次通信的私钥被泄露并不会造成太大的影响。

    提前通信:客户端无需等到服务端完成最后一次 TLS握手,就可以 提前发送 加密的HTTP数据了。

    参考资料

    HTTPS是什么?加密原理和证书。SSL/TLS握手过程 - 空降06:49

    小林coding - HTTPS RSA 握手解析

    小林coding - HTTPS ECDHE 握手解析

  • 相关阅读:
    华为OD机试 - 一种字符串压缩表示的解压 - 考生抽中题(Java 2023 B卷 100分)
    1.读写点云文件
    MySQL恢复不小心误删的数据记录(binlog)-生产实操
    查看创建好的数据库
    查阅必备----常用的SQL语句,配语句和图解超详细,不怕你忘记
    目标检测算法
    【面试题】什么是跨域?及7种跨域解决方法
    202、RabbitMQ 之 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型---fanout类型就是广播类型
    axios异步请求二次封装,发起请求添加loading及拦截重复请求
    DNS(域名解析系统)
  • 原文地址:https://blog.csdn.net/xyxyxyxyxyxyx/article/details/126132911
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号