Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • AIGC

  • Git

  • Linux

  • 数据协议

  • 数据结构

  • 架构设计

  • 算法

  • 编程工具

  • 编程范式

  • 编解码

  • 网络基础

    • HTTP状态码
    • CDN
    • DNS
    • HTTP
    • TCP
    • Web安全
    • http2
    • https
      • 背景知识
        • 对称加密
        • 非对称加密
      • https 传输过程
        • 1 客户端发起请求
        • 2 服务端配置
        • 3 传送证书
        • 4 解析证书
        • 5 传送加密信息
        • 6 服务端解密
        • 7 传输加密后的信息
        • 8 客户端解密信息
      • Q&A
        • Q: 一共携带几次随机数?为什么需要三次
        • Q1: 验证安全后,后面的数据传输为什么不能使用非对称加密来做?
        • Q2: 什么是中间人攻击
        • Q3: 中间人攻击时,返回合法证书会怎么样
        • Q4: 浏览器怎么验证证书是合法的
        • Q5:为什么抓包工具可以抓取 https 的网络包?
      • 参考
    • websocket
    • 跨域
    • cookie
    • 如何减少预检请求OPTIONS
    • 浏览器缓存
  • 通用技术
  • 网络基础
gahing
2019-12-15
目录

https草稿

# 背景知识

# 对称加密

加密秘钥和解密秘钥相同,加解密速度比非对称加密快

常用算法: DES ,AES

# 非对称加密

公钥公开,私钥保密

一方加密,需要用另一方进行解密

常用算法: RSA

# https 传输过程

过程如图所示

  • 先通过 RSA 交换 AES 口令
  • ...

# 1 客户端发起请求

# 2 服务端配置

服务端配置了公钥(证书信息),私钥

# 3 传送证书

包含了证书颁发机构,过期时间等信息

# 4 解析证书

验证该证书是否有效,

怎么验证? 如果异常,出现提示;

否则生成一个随机值,并用证书(公钥)对该随机值加密

# 5 传送加密信息

将加密后的随机值传送给服务端

# 6 服务端解密

服务端用私钥解出随机值,如果解不出,说明公钥有问题

# 7 传输加密后的信息

后面的数据将采用对称加密进行传输,密钥为随机值

# 8 客户端解密信息

客户端使用刚刚生成的随机数解密信息

# Q&A

# Q: 一共携带几次随机数?为什么需要三次

# Q1: 验证安全后,后面的数据传输为什么不能使用非对称加密来做?

因为公钥(证书)大家都有,如果仅用非对称加密的话,服务端用私钥加密,客户端需要用公钥解密,而由于公钥大家都有,所以服务端响应的数据如果被拦截,是可以被解密然后获取到具体信息

当然这种情况下客户端请求的数据不会被拦截

另外一点就是非对称加解密的效率较低

# Q2: 什么是中间人攻击

dns 解析被污染,用户访问的地址指向中间人服务器

tls 建联阶段,中间人服务器拿到服务器返回的证书A,返回给浏览器一个伪造证书B

由于各种原因(这里不展开),浏览器信任了中间人服务器发来的证书B

浏览器通过该证书B 对随机字符串进行公钥加密,并发往中间人服务器

由于中间人服务器有证书B对应的私钥,可以解开得到这个随机字符串,于是将该随机字符串又用证书A加密后,返回给服务器

服务器用私钥解密拿到该随机字符串,并把响应内容通过该随机字符串做对称加密返回

由于中间人知道该随机字符串,故

中间人可以解开浏览器的请求内容以及服务器的响应内容

达到了中间人攻击的效果

# Q3: 中间人攻击时,返回合法证书会怎么样

返回了原服务器的证书,浏览器是会信任该证书,可是由于没有私钥,中间人服务器并解不出由该证书加密的随机字符串,进而也达不到攻击的效果

# Q4: 浏览器怎么验证证书是合法的

  • 验证域名,有效期,证书来源

有被篡改的可能呀,所以

  • 通过 CA 服务器判断证书是否被篡改

已经验证过了,每次都得验证么?如何优化?所以

  • 通过 CRL 和 OCSP 判断证书是否已吊销,OCSP 可减少与 CA 服务器的交互

# Q5:为什么抓包工具可以抓取 https 的网络包?

  • 抓包工具本身就是一种中间人攻击手段(证书转发,通信拦截)
  • 若仅开启抓包工具未信任证书,只能抓取 http 包
  • 若再信任了抓包工具的根证书,将其放入受信任根证书存储中,就可以实现 https 包的抓取了

# 参考

  1. https://cloud.tencent.com/developer/article/1335821
  2. 你连 HTTPS 原理都不懂,还讲“中间人攻击”? (opens new window)
  3. https://schaepher.github.io/2020/04/25/https-certification/
编辑 (opens new window)
上次更新: 2024/09/01, 23:56:56
http2
websocket

← http2 websocket→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式