码农知识堂 - 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 握手解析

  • 相关阅读:
    Python的一些Pythnoic【我自己没读完,待看待再次整理】
    Webpack和JShaman相比有什么不同?
    Redis 7 第九讲 微服务集成Redis 应用篇
    hadoop HDFS常用文件操作命令
    傻白入门芯片设计,如何降低CPU功耗?(八)
    Vue练习
    开源消息引擎系统 Kafka 3新特性,一文带你了解
    mybatisplus 自定义mapper加多表联查结合分页插件查询时出现缺失数据的问题
    C++语言基础-函数重载
    syslog和syslog watch实现
  • 原文地址:https://blog.csdn.net/xyxyxyxyxyxyx/article/details/126132911
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号