A Roadmap
  • Introduction
  • Roadmap
  • Basics
    • Basic Terminal Usage
      • Shell
        • 基本
        • 变量
        • 传递参数
        • 运算符
        • 命令
        • 流程控制
        • 函数
        • 输入输出重定向
    • Character Encoding
      • 字符编码
    • Data Structures & algorithms
    • Network
      • TCP/IP
      • Http/Https
        • 浏览器缓存
        • Status Code
        • GET & POST
        • HTTPS 握手过程
        • HostOnly Cookie
      • CDN
        • CDN 工作原理
    • Version Control
      • git message format
      • git commands
    • Principles
    • Design Patterns
    • Others
      • JSON
      • 正则表达式
  • Front End
    • Web Standard
      • Html
      • CSS
        • font-face 小记
        • Grid 布局简易笔记
      • Javascript
        • Ajax
          • Fetch
          • XMLHttpRequest
        • DOM
          • Selection
          • 常用 DOM 操作
          • script 标签的几个属性
        • Ecmascript
          • this 关键字
          • Event Loop
          • 隐式转换
          • Date
        • Event
          • 模拟事件
          • Others
    • Development
      • Package Management
        • npm
      • Modulization
        • 模块化机制
        • webpack 打包解析
      • Architecture
      • Build Tools
        • 如何编写一个自定义的 eslint 规则?
      • Debug
        • 移动端调试 web
      • Pre/Post Processors
      • Test
        • Jest Snapshot 使用指南
      • Type Checkers
        • TS 中 enum 的编译结果
    • Libs & frameworks
    • Platforms
      • Browser
        • Basics
          • 从输入 URL 到页面加载完成都发生了什么事情?
          • HTML 加载的过程示意图
          • 为什么读取某些属性,也会导致回流?
          • Chrome 进程模型
        • PWA
        • Compatible
        • Cross Origin
        • Performance
          • 性能检测:performance 对象
          • 性能指标
        • Others
          • 移动端 web 开发笔记
      • Server
      • Desktop Applications
      • Mobile Applications
        • Flutter 在移动端和 Web 端的技术实现
  • Back End
    • outline
    • Languages
      • Node
        • Event Loop
        • NodeJS 中的进程与线程
        • NodeJS 中的 esModule 与 commonJS
  • Clients
    • outline
    • 安装 IPA 包
  • DevOps
    • Languages
    • OS Concepts
    • Servers & terminal
  • UI & UX
    • outline
  • Others
    • Posts
      • 使用 node 爬取数据并导出到 excel
      • antd 1.x datepicker 时区问题
      • babel-transform-runtime 踩坑记录
      • lodash 按需加载注意事项
      • 记一次项目迁移的踩坑记录
      • 时区与JS中的Date对象
      • 记一次 vue + ts 开发踩坑
    • Tools
      • 个人常用的工具分享
      • tmux 简要笔记
Powered by GitBook
On this page
  • Client Hello
  • Server Hello
  • Client Response
  • Server Response
  • Referrence

Was this helpful?

  1. Basics
  2. Network
  3. Http/Https

HTTPS 握手过程

Client Hello

  • client.random

  • SSL/TLS version

  • encrypt methods(suits) 加密方式 key exchange

其他:

  • 压缩方式

Server Hello

  • server.random

  • SSL/TLS version 确认支持的安全协议,如果客户端与服务端不一致则断开连接

  • encrypt methods(suits) 加密方式 key exchange

  • certificate CA证书

    • 包含服务器信息

    • signature

    • public-key

  • server hello done

其他:

  • ClientCertificateRequest 如果有要求,则还会请求客户端的证书

Client Response

  • CA校验 对服务端证书结构进行链式查找,与浏览器内置的CA证书比对。

    • 通过内置的CA公钥解密signature并判断

    • 证书的有效期

    • 证书所在的域名

  • pre-master secret (浏览器生成一个random,然后用证书中的public-key进行加密)

    • 根据client.random,server.random,pre-master secret 客户端会生成一个master secret用于之后的通信。

  • cipher change spec 更改加密协议,告诉服务端客户端将使用对称加密进行通信

其他:

  • SendClientCertificate 如果服务端要求发送客户端证书,则此时需要返回一个客户端证书

Server Response

  • 使用私钥解密客户端的pre-master secret,根据之前握手获得的所有random,生成master secret

  • cipher change spec

  • finished

其他:

  • 客户端证书校验 (如果有)

注: 并没有传输master—key这一步,客户端和服务端利用互相传输的random,结合商定好的加密方法,可以得出相同的对称加密秘钥。

Referrence

基本概念介绍。

关键字: 对称加密,非对称加密,CA证书,签名

数据通信的介绍。

关键字: 过程解析,字节,加密算法

规范。

阮一峰的科普。

关键字: master-secret的生成时client和server各生成一份。

PreviousGET & POSTNextHostOnly Cookie

Last updated 6 years ago

Was this helpful?

看完你就知道什么是 HTTPS 了
The First Few Milliseconds of an HTTPS Connection
RFC-2818
SSL/TLS协议运行机制的概述