HTTPS加密

一.加密是什么

加密就是把明文(要传输的信息)进行一系列的变换,生成密文.

有加密就有解密,解密就是把密文进行一系列的变换,生成明文.

在这个加密和解密过程中,往往需要一个或多个中间数据,辅助进行这个过程,这样的数据称为密钥.

加密解密到如今已经发展成了一个独立的学科 : 密码学

在密码学中,加密和解密,有两种方式 : 

1.对称加密 : 加密和解密,使用同一个密钥.

      明文 + key(密钥) => 密文

      密文 + key(密钥) => 明文

2.非对称加密 : 有两个密钥, 这两个密钥,一个称为"公钥",一个称为"私钥".(公钥就是公开的,私钥就是自己藏好的)

      明文 + 公钥 => 密文                      密文 + 私钥 => 明文

     明文 + 私钥 => 密文                       密文 + 公钥 => 明文

用一个钥匙加密就用一个钥匙解密

二.HTTPS的工作过程

1.先引入对称加密

    对称加密其实就是通过同一个"密钥",把明文加密成密文,并且也能把密文解密称明文.

引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了.

但是事情没这么简单,服务器同一时刻其实是给很多客户端提供服务,这么多客户端,每个人用的密钥都是必须不同的(如果是相同的那密钥就太容易扩散了,黑客就也能拿到了).因此,服务器就需要维护每个客户端和每个密钥之间的关系,这也是个很麻烦的事情.

比较理想的做法,就是能在客户端和服务器之间建立连接的时候,双方协商确定这次的密钥是啥

但是如果直接把密钥明文传输,那么黑客也能获取到密钥了,所以后面的加密操作就形同虚设了.

因此密钥的传输也必须加密传输.

但是想要对密钥进行对称加密,就仍然需要先协商确定一个"密钥的密钥",这样就成了"先有鸡还是先有蛋"的问题了,此时密钥的传输再用对称加密就行不通了.

如此就需要引入非对称加密.

2.引入非对称加密

非对称加密要用到两个缪要,一个叫做"公钥",一个叫做"私钥".

公钥和私钥是配对的.最大的缺点就是运算速度非常慢,比对称加密要慢的多.

       通过公钥对明文加密,变成密文.

       通过私钥对密文解密,变成密文.

也可以反着用

       通过私钥对明文加密,变成密文.

       通过公钥对密文解密,变成明文.

  • 客户端在本地生成对称密钥,通过公钥加密,发送给服务器.
  • 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥
  • 服务器通过私钥解密,还原出客户端发送的对称密钥.并且使用这个对称密钥解密给客户端返回的响应数据.
  • 后续客户端和服务器的通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义

由于对称加密的效率比非对称加密给很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密.

那么接下来问题又来了:

1.客户端如何获取到公钥?

2.客户端如何确定这个公钥不是黑客伪造的?

中间人攻击

黑客可以使用中间人攻击,获取到密钥

1.服务器具有非对称加密算法的公钥S,私钥S'

2.中间人具有非对称加密算法的公钥M,私钥M'

3.客户端向服务器发起请求,服务器明文传送公钥S给客户端

4.中间人劫持数据报文,提取公钥S并保存好,然后被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客户端

5.客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称密钥X,用公钥M加密X,形成报文发送给服务器.

6.中间人劫持后,直接用自己的私钥M'进行解密,得到通信密钥X,在用曾经保存的服务端公钥S加密后,将报文推送给服务器.

7.服务器拿到报文,用自己的私钥S'解密,得到通信密钥X

8.双方开始采用X进行对称加密,进行通信.但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改,都是可以的.

      3.引入证书

服务端在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息,公钥信息等,服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如省份证,证明服务端公钥的权威性.

这个证书可以理解成是一个结构化的字符串,里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名
  • ...

理解数据签名

当服务端申请CA证书的时候,CA机构会对该服务端进行审核,并专门为该网站形成数字签名,过程如下:

1.CA机构拥有非对称加密的私钥A和公钥A'

2.CA机构对服务端申请的证书明文数据进行hash,形成数据摘要

3.然后对数据摘要要用CA私钥A'加密,得到数字签名S

服务端申请的证书明文和数字签名S共同组成了数字证书,这样一份数字证书就可以颁发给服务端了

通过证书解决中间人攻击

在客户端和服务器刚建立连接的时候,服务器给客户端返回一个证书.

这个证书包含了刚才的公钥,也包含了网站的身份信息.

当客户端获取到这个证书之后,会对证书进行校验(防止证书是伪造的).

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的收信任的证书发布机构).
  • 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到一个hash值(称为数据摘要),设为hash1,然后计算整个证书的hash值,设为hash2,对比hash1和hash2是否相等,如果相等,则说明证书是没有被篡改的.

完整流程

总结

HTTPS工作过程中涉及到的密钥有三组

第一组(非对称加密) : 用于校验证书是否被篡改.服务器持有私钥(私钥在注册证书的时候是获取),客户端持有公钥(操作系统包含了课信任的CA认证机构有哪些,同时持有对应的公钥),服务器使用这个私钥对证书的签名进行加密,客户端通过这个公钥解密获取到证书的签名,从而校验证书内容是否是篡改过

第二组(非对称加密) : 用于协商生成对称加密的密钥,服务器生成这组 私钥-公钥 对,然后通过证书把公钥传递给客户端.然后客户端用这个公钥给生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密的密钥.

第三组(对称加密) : 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.

其实一切关键都是围绕这个对称加密的密钥,其他的机制都是辅助这个密钥工作的: 

 第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器

 第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/671104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 356 A~E(F更新中...)

A.Subsegment Reverse 题意 给出三个正整数 N , L , R N, L, R N,L,R。 对于一个序列 A ( 1 , 2 , … , N ) A (1, 2, \ldots, N) A(1,2,…,N)&#xff0c;请你输出翻转了 L ∼ R L \sim R L∼R之间数字后得到的序列。 分析 使用循环进行翻转即可。 代码 #include <…

学工管理系统有什么作用

学生信息办理系统是针对学校学生处的很多作业处理作业而开发的办理软件&#xff0c;首要用于学校学生信息办理&#xff0c;整体使命是完成学生信息联系的体系化、科学化、标准化和自动化&#xff0c;其首要使命是用手机和计算机对学生各种信息进行日常办理&#xff0c;如查询、…

Ubuntu 20.04 LTS配置JDK、Git

一、配置JDK 1.1 更新系统 执行以下命令 sudo apt update 出现以下界面即为安装成功 1.2 安装openjdk-11-jdk Ubuntu20.04中没有默认JDK&#xff0c;执行以下指令安装&#xff0c;默认会自动配置一些必要环境变量 sudo apt install openjdk-11-jdk 1.3 配置环境变量&…

CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接

1 CMake介绍 CMake是一个开源的、跨平台的构建系统&#xff0c;用于管理软件从源代码到可执行文件的整个构建过程。它最初由Kitware公司为ITK&#xff08;Insight Segmentation and Registration Toolkit&#xff09;和VTK&#xff08;Visualization Toolkit&#xff09;等开源…

TimeDao-一篇文章了解清楚Subspace项目

1 项目简介 什么是Subspace网络&#xff1f; Subspace是为下一波加密创建者构建的第四代区块链。旨在实现web3规模扩容。 Subspace允许开发者以互联网规模运行 Web3 应用。它提供了一个简单的接口&#xff0c;用于快速部署按需求自动扩展的多链去中心化应用。Subspace由一个…

Python06 条件判断语句

Python 条件判断语句 Python 条件判断语句格式1if 条件 :else:格式2if 条件 :elif条件 :else:三目: second_max num1 if 条件语句 else num2# 快捷键: tab 整体向右移动一个水平制表符&#xff0c;shift tab 整体向左移动一个水平制表符 num1 10 num2 20 if num2 > num…

每日5题Day15 - LeetCode 71 - 75

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;71. 简化路径 - 力扣&#xff08;LeetCode&#xff09; class Solution {public String simplifyPath(String path) {Deque<String> stack new LinkedList…

Java17 --- SpringCloud之seate

目录 一、创建seata需要的mysql数据库表 二、修改seata的配置文件 三、启动nacos及seata 四、创建需要的数据库及表 一、创建seata需要的mysql数据库表 CREATE DATABASE seata;CREATE TABLE IF NOT EXISTS global_table(xid VARCHAR(128) NOT NULL,…

电影APP需求规格说明书示范

电影APP需求规格说明书示范 目录结构参考1 引言1.1编写目的1.2背景1.3项目目标1.4 概述 2 整体说明2.1 用例模型2.2 产品功能2.3 用户特点2.4 需求分配 3 具体需求3.1用例描述3.2用例细化 4 支持信息 目录结构参考 计算机软件需求规格说明规范 标准号&#xff1a;GB/T 9385-20…

Jmeter参数化

Jmeter参数化 本质&#xff1a;使用参数的方式来替代脚本中的固定的测试数据 实现方式&#xff1a; 定义变量&#xff08;最基础&#xff09; 文件定义的方式&#xff08;所有测试数据都是固定的情况下&#xff09; 数据库的方式&#xff08;灵活&#xff09; 函数方式&am…

详解 Spark核心编程之广播变量

广播变量是分布式共享只读变量 一、广播变量功能 ​ 广播变量用来将一个较大的数据对象发送到 Executor 并保存在内存中&#xff0c;同一个 Executor 中的所有 Task 都可以读取且只能读取广播变量中的数据&#xff0c;从而达到共享的目的&#xff0c;避免 Executor 中存在大量…

java—MyBatis框架

简介 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&…

SparkSql近期使用经验分享

背景 近期在公司使用了SparkSql重构一个由Java开发的ETL程序&#xff0c;因为Java模块不易于修改和部署&#xff0c;而由于SparkSql脚本是由Python开发&#xff0c;便于根据业务需求来开发维护&#xff0c;特别是不需要编译、打包部署。 技术理念 SparkSql是以Sql的形式去开…

三十三篇: 解锁决策之门:专家系统深度探索与未来展望

解锁决策之门&#xff1a;专家系统深度探索与未来展望 在今天这个日益复杂的世界中&#xff0c;我们对决策的速度和质量提出了更高的要求。在众多解决方案中&#xff0c;专家系统作为人工智能的一大分支&#xff0c;扮演着不可或缺的角色。它不仅是技术创新的产物&#xff0c;…

html+CSS+js部分基础运用11

一、改变新闻网页中的字号 1、设计如图1-1所示的界面&#xff0c;要求当网络访问者选择字号中的【大、中、小】时能实现页面字号大小变化&#xff0c;选择“中”时&#xff0c;页面效果如图1所示。 图1 单击前初始状态页面 图2 单击“中”链接后页面 2、div中内容如下&#x…

操作系统|进程和线程的上下文以及他们的上下文切换具体流程?

进程和线程已经是老生常谈的问题了&#xff0c;现在那么他们是如何进行切换的呢&#xff1f;他们之间的切换有什么区别呢&#xff1f;如果你不懂的话&#xff0c;就让我们一起来探讨一下吧&#xff01; 进程上下文切换(context switch) 进程到底由哪些部分组成&#xff1f; …

thingsboard物联网平台快速入门教程

第一步&#xff0c;搭建服务器 使用我已经建好的服务器&#xff0c;thingsboard测试账号,租户管理员账号&#xff0c;物联网测试平台-CSDN博客 第二步&#xff0c;创建一个设备&#xff0c;获取设备Token 用租户管理员账户登录&#xff0c;左侧找到实体->设备&#xff0c…

无法拒绝!GPT-4o 完美适配安卓手机,畅享丝滑体验

无法拒绝&#xff01;GPT-4o 完美适配安卓手机&#xff0c;畅享丝滑体验 前言 人工智能的飞速发展&#xff0c;给我们的生活带来了前所未有的便利。作为AI技术的代表之一&#xff0c;GPT凭借其强大的自然语言处理能力&#xff0c;已经成为许多用户日常生活和工作中的得力助手…

模拟集成电路(6)----单级放大器(共源共栅级 Cascode Stage)

模拟集成电路(6)----单级放大器&#xff08;共源共栅级 Cascode Stage&#xff09; 大信号分析 对M1 V x ≥ V i n − V T H 1 V x V B − V G S 2 V B ≥ V i n − V T H 1 V G S 2 V_{x}\geq V_{in}-V_{TH1}\quad V_{x}V_{B}-V_{GS2}\\V_{B}\geq V_{in}-V_{TH1}V_{GS2} Vx…

Mybatis项目创建 + 规范

文章目录 一、相关概念Mybatis1.1 什么是Mybatis1.1 如何实现简化JDBC 二、如何创建 Mybatis 项目2.1 创建SpringBoot项目 加载依赖2.2 准备数据库 以及 对象的映射2.3 配置数据库连接池2.4 使用Mybatis操作数据库2.5 单元测试 三、其他3.1 数据库与Java对象的映射规则 ---- 结…