当前位置: 首页 > news >正文

HTTPS 原理技术

HTTPS原理技术

  • 背景
  • 简介
  • 原理
  • 总结

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

简介

HTTPS 中的 SSecure 的缩写,是在 HTTP 基础上增加了一个安全层,通过加密等手段保证传输数据安全。

早期 HTTPS 使用 SSL(Secure Socket Layer,安全套接字层) 协议,从 SSL 3.1 开始 IETF 将其标准化并重命名为 TLS(Transport Layer Security,传输层安全),目前最新的 TLS 版本是 2018 年发表的 TLS 1.3,但应用最为广泛的是 2008 年发表的 TLS 1.2。

因此 HTTPS = HTTP + SSL/TLS

原理

下面通过实际场景逐步说明 HTTPS 的原理。

  1. HTTP 通信过程中,所有的消息(message)都是明文传输,一旦遇到非法中间人(如黑客)监听拦截,便可获取所有的传输消息并进行伪造,如下图所示。
    HTTP明文传输

  2. 为解决传输数据安全的问题,通信的双方决定采用 对称加密 技术对消息进行加密,这样中间人最多只能获取加密后的密文,没有密钥的话不能伪造任何消息,伪造的消息到达消息接收方后无法被正确解密。
    HTTP对称加密
    此方案仍然存在两个问题:
    ① 使用相同密钥的情况下,如果通信存在多方,那么所有的通信消息都使用相同的密钥加解密,因此通信相当于是透明的,中间人可以伪装成一个合法的通信方,拿到密钥后便可获取所有的通信消息。
    ② 使用相同密钥的情况下,密钥只能在通信的一方生成,如何传递给通信的另一方,如何解决密钥传递过程的安全问题?

  3. 解决以上两个问题的关键是:
    ① 通信双方必须使用独立且唯一的密钥对通信消息进行加解密,这个密钥只有这两者知道,不能透露给任何第三方。
    ② 密钥必须以加密方式进行传递。
    因此通信的双方决定先采用 非对称加密 技术生成一个密钥对,然后拥有公钥的一方生成一个随机密钥,通过公钥加密后将此密钥发给另一方,另一方使用私钥解密后拿到相同的随机密钥,后续的通信过程就使用此随机密钥进行消息加解密,如下图所示。
    HTTP非对称加密
    此方案仍然存在问题:拿到公钥的 A 怎么能确保公钥的合法性?中间人完全可以先伪装成 A 拿到来自 B 的公钥 KEY1,然后生成自己的密钥对,将自己生成的公钥 KEY2 伪装成合法的公钥发送给 A,后续通信过程中 A 会使用拿到的公钥 KEY2 对消息进行加密并发送,中间人截取到后使用自己的私钥解密获取通信消息原文,然后伪造通信消息并使用合法公钥 KEY1 进行加密后发送给 B。

  4. 为解决公钥信任问题,引入了数字证书技术,以下便是 HTTPS 原理示意图。
    HTTPS原理
    实现 HTTPS 的整个过程分为三大阶段:

    • [A] 客户端内置 CA 公钥,以浏览器为例,各大浏览器厂商在发行版本中已内置 CA 相关数据;
    • [B] 向 CA 机构申请数字证书,并将证书部署到服务器;
    • [C] HTTPS 作用过程简述:
      • [C-1] 客户端发起 HTTPS 请求;
      • [C-2] 服务器把数字证书返回给客户端;
      • [C-3] 客户端校验数字证书合法后,从中取出服务器公钥,并生成一个随机码,用公钥对随机码进行加密;
      • [C-4] 客户端将公钥加密后的随机码发送给服务器;
      • [C-5] 服务器使用私钥解密得到随机码;
      • [C-6] 客户端和服务器根据双方之前通信交换的信息(包括随机码)生成同样的密钥,后续使用此密钥对通信信息进行对称加密。

总结

本文聚焦对 HTTPS 原理的说明,对于 HTTPS 使用到的对称加密、非对称加密、数字证书、数字签名等技术及 SSL/TLS 等协议将在后续文章中做出更加详细的说明。

相关文章:

  • 专科生听劝 这种情况你就不要专转本了
  • 【QT】qcombox的信号使用小细节,activated(int)和currentIndexChanged(int)
  • 数据分析案例-在线食品订单数据可视化分析与建模分类
  • 【YashanDB知识库】自动选举配置错误引发的一系列问题
  • java实现地形dem产汇流流场数据提取解析
  • 《少年小鱼的魔法之旅——神奇的Python》,在悬疑和冒险中学会Python编程,Python启蒙入门的推荐书籍
  • 组合数计算方法(递推公式、乘法逆元)
  • MFC工控项目实例之二添加iPlotx控件
  • MySQL基础索引知识【索引创建删除 | MyISAM InnoDB引擎原理认识】
  • 【爱空间_登录安全分析报告】
  • ChatGPT AI专题资料合集【65GB】
  • 记 Codes 开源免费研发管理平台 —— 日报与工时融合集中式填报的创新实现
  • 安卓获取内部存储信息
  • 使用 Django ORM 进行数据库操作
  • 《逆水寒》手游周年庆,热度不减反增引发热议
  • [数据结构]链表的实现在PHP中
  • Android 控件背景颜色处理
  • Docker 笔记(2):Dockerfile
  • Hibernate【inverse和cascade属性】知识要点
  • KMP算法及优化
  • mac修复ab及siege安装
  • scrapy学习之路4(itemloder的使用)
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 近期前端发展计划
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何设计一个微型分布式架构?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 写代码的正确姿势
  • 找一份好的前端工作,起点很重要
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ionic入门之数据绑定显示-1
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​如何在iOS手机上查看应用日志
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #HarmonyOS:基础语法
  • #if 1...#endif
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)无线电失控保护(二)
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)nginx 配置(nginx.conf)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (k8s中)docker netty OOM问题记录
  • (Qt) 默认QtWidget应用包含什么?
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (八十八)VFL语言初步 - 实现布局
  • (初研) Sentence-embedding fine-tune notebook
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (回溯) LeetCode 131. 分割回文串
  • (算法)Travel Information Center
  • (一) 初入MySQL 【认识和部署】