HTTPS 的加密流程

目录
一、HTTPS是什么?
二、为什么要加密
三、"加密" 是什么
四、HTTPS 的工作过程
1.对称加密
2.非对称加密
3.中间人攻击
4.证书
总结
一、HTTPS是什么?
HTTPS (Hyper Text Transfer Protocol Secure) 是基于 HTTP 协议之上的安全协议,用于在客户端和服务器之间通过互联网传输数据的加密和身份验证。它使用 SSL/TLS (Secure Sockets Layer/Transport Layer Security) 协议来保护数据的安全性,可以防止数据被窃听、篡改或伪造。
HTTP 协议是一种明文传输的协议,数据在传输过程中不加密,容易被黑客截获并窃取敏感信息。而使用 HTTPS 协议进行数据传输,可以通过 SSL/TLS 协议将数据加密,使得数据在传输过程中无法被黑客窃取,保护了数据的安全性。
HTTPS 还可以对服务器端的身份进行验证,防止伪造服务器,保护了双方的身份安全。在 HTTPS 和 SSL/TLS 协议的支持下,现在许多电子商务、银行、社交网络和其他网站都采用 HTTPS 协议来保护用户的隐私和安全。
二、为什么要加密
HTTP 是一种应用层协议,是用于在 Web 应用程序之间传递数据的标准方式,但是 HTTP 本身并不安全,因为 HTTP 在传输数据时是明文传输的,攻击者可以很容易地截获和窃取数据。这就会导致以下不安全的情况:
1. 窃取敏感信息: 攻击者可以窃取用户登录信息、信用卡信息、银行账户信息等敏感信息。
2. 篡改数据:攻击者可以在传输过程中篡改数据,比如,将网页内容篡改成恶意代码,欺骗用户下载恶意文件等。
3. 伪造身份:攻击者可以伪造身份,冒充网站或服务器,从而欺骗用户提供个人信息或敏感信息。
HTTPS 是在 HTTP 协议基础上加入了 SSL/TLS 加密机制,对 HTTP 的传输过程进行加密,可以保护数据的安全性和完整性,解决了 HTTP 明文传输所带来的安全问题。因此,在需要保护用户隐私信息或者防止黑客攻击时,使用 HTTPS 更加安全可靠。
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改.这就是运营商劫持
点击 "下载按钮", 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改 成 "QQ浏览器" 的下载地址了

三、"加密" 是什么
加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 .
解密就是把 密文 再进行一系列变换, 还原成 明文 .
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥 (正确发音 yue 四声, 不过大家平时都读作 yao 四声)
四、HTTPS 的工作过程
既然要保证数据安全, 就需要进行 "加密".
网络传输中不再直接传输明文了, 而是加密之后的 "密文".
加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密
1.对称加密
进行安全传输,其中最核心的技术就是加密,而其中最为简单、有效的方法就是“对称加密”。对称加密的方式如下:
明文 + key => 密文。加密的过程
密文 + key => 明文。解密的过程
其中key就表示密钥,是一串数字或者字符串。同一个密钥可以用来加密也可以用来解密,因此就称其为“对称密钥”。但是其保证安全性的前提是,不能让密钥被他人知道,如果密钥被一些不法之徒获取,那么这个加密也就形同虚设了。
下面我们用图片演示过程及信息:

但是问题来了,客户端需要自己生成一个密钥,如何把这个密钥告诉给服务器呢?
答案是:网络传输
这样的话看起来我们是需要针对key也进行加密一下 所以接下来我们引用了非对称加密.
2.非对称加密
非对称加密就是,生成一对密钥,一个叫公钥(pub)一个叫密钥(pri)。加密方式如下:
明文 + 公钥 => 密文。
密文 + 私钥 => 明文。
其中,明文也可以使用私钥加密,密文可以使用私钥解密。公钥是可以公开的,私钥是私密的。
所以我们接下来的目标就是客户端把自己的key安全传输到服务器

首先服务器生成一对公钥私钥。其中客户端持有公钥,服务器持有私钥。由于客户端的公钥从服务器获取,因此黑客也可以知道公钥。但是由于私钥只有服务器才知道,不会告诉别人。因此就算黑客知道了公钥,也无法解密。
接着客户端使用公钥来对对称密钥进行加密,传输给服务器,服务器通过私钥进行解密,获得对称密钥。此时客户端就可以使用这个对称密钥进行后续的传输工作。
但是由于非对称加密比较慢,对称加密比较快。因此一般使用非对称加密来进行对称密钥的加密传输。而用对称加密来进行后续的传输工作。
3.中间人攻击
上面所说的非对称加密和对称加密好像是已经把要传输的数据保护的天衣无缝了。但是,其实其中还有一个巨大的漏洞。这就是我们所说的中间人攻击。
虽然我们认为已经非常安全了,但是黑客不是吃素的

上图就是关于中间人攻击的一个介绍。实质上就是黑客在中间充当一个双面客。服务器将公钥pub发送过来,黑客在中间劫持。并且自己生成了一对非对称密钥。将自己生成的pub2发送给客户端。但是由于客户端不知道发送来的pub2是不是服务器发送来的公钥,因此也就上当。将对称密钥通过pub2进行加密,发送给黑客。然后黑客将以pub2加密的对称密钥进行解密,那到对称密钥。再将对称密钥使用pub1进行加密,发送给服务器。由于服务器也不知道这个加密过的对称密钥是不是客户端发过来的,因此也就使用这个对称密钥进行后续的加密了。
从上述过程来说,客户端无法判断公钥的真假造成的。如果客户端可以辨别公钥的真假,那么这个中间人攻击也就迎刃而解了!
4.证书
证书是什么
SSL/TLS 证书是一种网络安全协议,用于在互联网上建立安全通信。在 HTTPS 这种加密方式中,证书用于验证网站的身份和保证数据传输的安全性。
证书由数字签名机构(CA)颁发,证明了网站的身份信息和公钥的有效性。CA 通过审核网站申请者的身份信息,发放证书并签名,网站通过证书验证来证明其身份,以确保用户与网站建立的加密连接是信任的。
证书包含网站的信息,如名称、域名、过期日期和公钥等等。证书中的公钥可用于安全地加密用户数据并将其发送到服务器。证书还包含签名,以确保其未被篡改。如果签名无效或证书已过期,则表示证书不可信任。
浏览器通常默认信任一些公共的 CA,这些 CA 证书预装在浏览器中。这意味着如果网站使用由公共 CA 颁发的证书,浏览器将信任该证书,并且用户可以通过 HTTPS 安全地与该网站建立连接。
为了解决上述问题,人们就想出来了“证书”这个方法。就是上服务器(网站)在成立的时候,需要去一些专门的认证机构(第三方机构)申请证书。服务器需要提供一些资质。当申请通过之后,机构就会给你颁发证书。其中,证书中也就包含了公钥。此时客户端申请公钥的时候,此时就不应该只是请求要一个公钥了,而是请求要一个证书。当客户端拿到证书之后,就可以进行校验。验证证书是不是假的或者被篡改的。如果客户端发现证书是无效的,浏览器就会直接弹框警告。
客户端拿到证书之后,就首先需要针对证书进行校验!!
- 得到初始的签名:客户端使用系统内置的权威机构的公钥pub针对证书中的加密签名解密,得到了初始签名
- 计算现在的签名:客户端使用相同的签名算法,基于证书的属性进行计算
- 比较两个签名是否相同 如果相同证明整数中的数据都是未被篡改的原始数据, 如果签名不同说明证书数据被篡改,客户端的浏览器弹框报错.
在这里我们需要明确证书的校验:
证书中包含很多信息,我们用这些属性进行一个计算也就是校验和(签名),再由证书颁布机构使用自己的私钥进行加密, 此处我们要知道的是 这个私钥只有证书机构自己知道
也就是说输入数据没有被篡改那么根据相同的算法得到的签名也是一样的
反之,签名不同了,那么数据一边被篡改了
在这种加密过程下,黑客是无法修改我们数据的,黑客如果想改就要知道证书机构的密钥,否则解密了之后 黑客无法再次进行加密,那么到客户端就会直接弹框报错
总结
HTTPS 工作过程中涉及到的密钥有三组.
- 第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.
- 第二组(非对称加密): 用于协商生成对称加密的密钥. 服务器生成这组 私钥-公钥 对, 然后通过证书把公钥传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
- 第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.
其实一切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥工作的.
第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器.
第一组非对称加密的密钥是为了让客户端拿到第二组

相关文章:
HTTPS 的加密流程
目录 一、HTTPS是什么? 二、为什么要加密 三、"加密" 是什么 四、HTTPS 的工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.证书 总结 一、HTTPS是什么? HTTPS (Hyper Text Transfer Protocol Secure) 是基于 HTTP 协议之上的安全协议&…...
Jmeter 参数化的几种方法
目录 配置元件-用户自定义变量 前置处理器-用户参数 配置元件-CSV Data Set Config Tools-函数助手 配置元件-用户自定义变量 可在测试计划、线程组、HTTP请求下创建用户定义的变量 全局变量,可以跨线程组调用 jmeter执行的时候,只获取一次࿰…...
剑指Offer45.把数组排成最小的数 C++
1、题目描述 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: “102” 示例 2: 输入: [3,30,34,5,9] 输出: “3033459” 2、VS2019上运行 先转换成字符串再组合起来 #in…...
【java毕业设计】基于SSM+MySql的人才公寓管理系统设计与实现(程序源码)--人才公寓管理系统
基于SSMMySql的人才公寓管理系统设计与实现(程序源码毕业论文) 大家好,今天给大家介绍基于SSMMySql的人才公寓管理系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获取方式。更多毕业…...
golang操作excel的高性能库——excelize/v2
目录 介绍文档与源码安装快速开始创建 Excel 文档读取 Excel 文档打开数据流流式写入 [相关 Excel 开源类库性能对比](https://xuri.me/excelize/zh-hans/performance.html) 介绍 Excelize是一个纯Go编写的库,提供了一组功能,允许你向XLAM / XLSM / XLS…...
学习51单片机怎么开始?
学习的过程不总是先打好基础,然后再盖上层建筑,尤其是实践性的、工程性很强的东西。如果你一定要先全面打好基础,再学习单片机,我觉得你一定学不好,因为你的基础永远打不好,因为基础太庞大了,基…...
[.NET学习笔记] -.NET6.0项目动态加载netstandard2.0报错但项目添加引用则正常的问题
问题描述 .NET6.0的项目使用netstandard2.0版本的动态链接库。若是在项目中直接添加引用,应用netstandard2.0项目或者netstandard2.0编译后的dll均能正常工作。但如果通过xcopy等方式,额外将对应的dll复制到执行目录,会执行失败。调用方式一…...
山景DSP芯片可烧录AP8224C2音频处理器方案
AP8224C2高性能32位音频应用处理器AP82系列音频处理器是面向音频应用领域设计的新一代SoC平台产品,适用于传统音响系统、新兴的蓝牙或Wifi 无线音频产品、Sound Bar 和调音台等市场。该处理器在总体架构和系统组成上,充分考虑了音频领域的特点࿰…...
来聊聊托管服务提供商(MSP)安全
纵观各个中小型企业,由于预算十分有限而且系统环境的满载,如今它们往往需要依赖托管服务提供商(managed service providers,MSP)来支持其IT服务与流程。而由于MSP提供的解决方案可以与客户端基础设施相集成,…...
最新版本的Anaconda环境配置、Cuda、cuDNN以及pytorch环境一键式配置流程
本教程是最新的深度学习入门环境配置教程,跟着本教程可以帮你解决入门深度学习之前的环境配置问题。同时,本教程拒绝琐碎,大部分以图例形式进行教程。这里我们安装的都是最新版本~ 文章目录 一、Anaconda的安装1.1 下载1.2 安装1.3 环境配置…...
【数据结构与算法】十大经典排序算法-选择排序
🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…...
【Spring专题】Spring之Bean的生命周期源码解析——阶段一(扫描生成BeanDefinition)
目录 前言阅读准备阅读指引阅读建议 课程内容一、生成BeanDefinition1.1 简单回顾*1.2 概念回顾1.3 核心方法讲解 二、方法讲解2.1 ClassPathBeanDefinitionScanner#scan2.2 ClassPathBeanDefinitionScanner#doScan2.3 ClassPathScanningCandidateComponentProvider#findCandid…...
【C#】判断打印机共享状态
打印机共享状态 /// <summary>/// 打印机共享状态/// </summary>public enum PrinterShareState{/// <summary>/// 无打印机/// </summary>None -1,/// <summary>/// 未共享/// </summary>NotShare 0,/// <summary>/// 已共享/// …...
运维监控学习笔记7
Zabbix的安装: 1、基础环境准备: 安装zabbix的yum源,阿里的yum源提供了zabbix3.0。 rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 这个文件就是生成了一个zabbix.repo 2、安…...
【业务功能篇64】maven加速 配置settings.xml文件 镜像
maven加速 添加阿里镜像仓 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additi…...
Spring Boot(六十四):SpringBoot集成Gzip压缩数据
1 实现思路 2 实现 2.1 创建springboot项目 2.2 编写一个接口,功能很简单就是传入一个Json对象并返回 package com.example.demo.controller;import com.example.demo.entity.Advertising; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframewo…...
Mac安装opencv后无法导入cv2的解决方法
前提条件:以下两个插件安装成功 pip install opencv-python pip install --user opencv-contrib-python 注:直接用pip install opencv-contrib-python如果报错,就加上“–user" 第一步: 设置–添加python解释器 第二步&am…...
【题解】按之字形顺序打印二叉树
按之字形顺序打印二叉树 题目链接:按之字形顺序打印二叉树 解题思路:层次遍历,借助队列 首先解决如何模仿之字形的问题,我们为此设置一个flag,每到一层就修改flag,如果flag为true(初始为fals…...
后端人员如何快速上手vue
一、环境搭建 了解更多vue-cli 官网地址:https://cli.vuejs.org/zh/guide/browser-compatibility.html 前提 1.安装node(js代码的运行环境)、npm、cnpm/yarn; nodejs官网:https://nodejs.org/en cnpm安装:https://www.python100.com/htm…...
基于Prometheus监控Kubernetes集群
目录 一、环境准备 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master节点 2.6、安装node节点 2.7、安装flannel、cni 2.8、部署测…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
