关于 HTTPS 的加密流程

news2024/9/28 21:22:11

目录

    • HTTP 与 HTTPS 的区别
    • 加密方式
    • HTTPS 基本工作过程
      • 1. 仅使用对称密钥
      • 2. 引入非对称密钥对 key 进行加密
      • 3. 引入证书, 破解中间人攻击

HTTP 与 HTTPS 的区别

其实 HTTPS 与 HTTP 一样都是应用层协议, HTTPS 只是在 HTTP 的基础上再加上了一个加密层.

为啥要对 HTTP 进行加密呢?
HTTP 协议内容都是按照文本格式明文传输的, 这就导致在传输过程中可能会被篡改. (明文传输的各种信息会被别人一览无余, 没有隐私)

曾经就发生过一个大事件 : “运营商劫持”.
就好比我现在进入官网下载一个官方软件, 点击下载后弹出的是其他软件的下载, 这过程就是我发送一个HTTP请求给服务器, 服务器返回一个带有下载链接的HTTP响应, 结果被运营商修改了响应里的下载链接, 这样我得到的就是换掉的链接了.

为啥运营商能劫持数据呢 ?
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据报的内容, 并进行篡改.
其实不止运营商能得到用户与服务器交互的数据报, 黑客也可以.

HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全.

加密方式

网络传输中不再直接传输明文了, 而是加密之后的 “密文”.
加密的方式有很多, 但是整体可以分成两大类: 对称加密非对称加密

对称加密 :
只有一个密钥 key, 通过这个 key 可以将明文加密成密文, 同样的也可以用 key 将密文解密为明文.
对称加密的特点 : 计算起来比较快.

非对称加密 :
非对称加密要用到两个密钥, 一个叫做公钥(pub), 一个叫做私钥(pri). 公钥和私钥是配对的.
非对称加密的使用 :

通过私钥对明文加密, 变成密文, 再通过公钥对密文解密, 变成明文.
也可以反着来 : 通过公钥对明文加密, 变成密文, 再通过私钥对密文解密, 变成明文.

非对称加密缺点 : 运算速度非常慢,比对称加密要慢很多.

HTTPS 基本工作过程

注意 : 加密是针对 HTTP 的各种 header 和 body.

1. 仅使用对称密钥

在这里插入图片描述
注意 : 以上交互的前提是服务器存储了客户端的 key.

但实际上服务器所要服务的客户端非常多, 不可能将客户端的 key 都存储下来, 而客户端也不可能都使用一个 key, 如果所有客户端都使用一个 key, 那黑客就直接知道 key 了, 可以对数据报进行修改.

那咋办呢 ?
我们可以通过客户端自己生成一个 key, 在与服务器进行交互时, 提前告诉服务器我的 key 是多少, 然后客户端和服务器就用 key 来对数据加密解密.

那客户端总不能明文传输 key 吧, 这时候就要用到 非对称密钥 来对 key 加密了.

2. 引入非对称密钥对 key 进行加密

首先明确目标 : 客户端要将 key 安全送达到服务器, 不被黑客拿到.

先是客户端随机自己生成了一个 key, 服务器自己则有一对非对称密钥.
具体加密过程如下图 :

在这里插入图片描述

这样难道就真的安全吗? 黑客就没办法破解吗?

其实黑客可以通过欺骗手段来获取 key, 简称 “中间人攻击”.
原理如下 :
在这里插入图片描述
中间人攻击的关键在于客户端信任公钥, 同时这也是破解中间人攻击的关键.

3. 引入证书, 破解中间人攻击

证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证).

证书可以理解为一个对象, 这个对象包含了 :
服务器的 url, 证书的有效期, 颁布证书的机构, 服务器自己的公钥 pub, 签名等等.
注意, 签名前面的都是明文展示的, 签名是进行加密了的.
这个签名其实就是一个校验和, 证书颁布机构会针对所有属性计算一个校验和, 然后用机构自己的私钥对其进行加密.

注意 : 每个机构的非对称密钥都不一样, 每个机构的公钥都内置在操作系统中, 不需要去机构拿.

客户端访问服务器时就询问服务器公钥, 服务器就直接把证书发给客户端.
客户端拿到证书后, 首先就是对证书进行校验.

  1. 得到初始的签名 : 客户端使用系统内置的权威机构的公钥, 对证书中的加密的签名进行解密, 得到初始签名(sum1)
  2. 计算现在签名 : 客户端使用同样的算法计算证书中的各种属性, 得到sum2.
  3. 比较两个sun值是否相同, 如果相同则说明是未被篡改的数据(安全), 如果不同, 则说明证书被篡改了(不安全), 客户端的浏览器就报错.

注意 : 这里为啥黑客就不能破解呢?
黑客也是可以破解签名的, 但是黑客不能对签名进行加密, 黑客没有机构的私钥, 既然无法加密, 那自然无法伪造签名了, 就不能破解了.

其实上述这一套 :
对称加密 + 非对称加密 + 证书, 也是一个协议, 叫 SSL 或者 TLS .
HTTPS 也就等于 HTTP + SSL.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bugku---misc

一.telnet 下载后是一个压缩包 条件反射,先丢在wireshark中看一下, 直接搜flag,就 出来了 Data: flag{d316759c281bf925d600be698a4973d5} 二.简单取证1 之前只做过取证大赛的,但是这个没有啥思路,看了一下需要工具m…

Redis集群简介及槽位映射(哈希取余和一致性哈希算法)

redis cluster需求至少需要3个master才能组成一个集群,同时每个sentinel至少有一个slave节点,各个节点之间保持tcp通信。当master发生宕机,redis cluster自动将对应的slave节点提拔为master,来重新对外提供服务。 先来说一下槽,集…

从“被动发现”变为“主动感知”|智能井盖脚下安全守护者

井盖作为城市基础设施的重要组成部分,具有关键的作用。城市的管道网络错综复杂,包括雨水、污水、弱电和强电等。其中,雨水和污水管道的管径较大,可能会导致隐藏或其他安全事故的发生。而弱电井则是整个城市信息传输的重要环节&…

Java 基础进阶篇(十四):File 类常用方法

File 类的对象代表操作系统的文件(文件、文件夹),File 类在 java.io.File 包下。 File 类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件…

Java【文件和IO】File 类, 字节IO流的使用

文章目录 前言一、File 类1, 构造方法2, 成员方法 二、字节流输入输出1, 字节流输入 InputStream1.1, 每次输入一个字节1.2, 每次输入多个字节 2, 字节流输出 OutputStream2.1, 每次输出一个字节2.2, 每次输出多个字节 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望…

chatgpt赋能Python-python3__2怎么算

Python3中<<2的计算方法 Python3是一种高级编程语言&#xff0c;它具有强大的数据分析和计算能力。在Python3中&#xff0c;<<2是一种用于移位计算的运算符。在本篇文章中&#xff0c;我们将介绍Python3中<<2的计算方法。 什么是移位运算符 移位运算符是一…

C++基础语法——内存管理

1. C/C中的内存管理 我们先看如下一段代码 #include <iostream>using namespace std;int globalVar 1; static int staticGlobalVar 1;void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const ch…

rk3399 buildroot ubuntu20版本编译遇到问题

一、编译uboot遇到问题 /usr/include/libfdt.h:258:1: error: redefinition of fdt_set_version 258 | fdt_set_hdr_(version); | ^~~~~~~~~~~~ In file included from tools/fdt_host.h:11, from tools/imagetool.h:22, from tools…

BurpSuite—-Target模块(目标模块)

前言 本文主要介绍BurpSuite—-Target模块(目标模块)的相关内容 关于BurpSuite的安装可以看一下之前这篇文章&#xff1a; http://t.csdn.cn/cavWt Target功能 目标工具包含了SiteMap&#xff0c;用你的目标应用程序的详细信息。它可以让你定义哪些对象在范围上为你目前的工…

基于QGIS的长株潭城市群边界范围融合实战

背景 在面向区域的研究过程中&#xff0c;比如一些研究区域&#xff0c;如果是具体的行政区划&#xff0c;比如具体的某省或者某市或者县&#xff0c;可以直接从国家官方的地理数据中直接下载就可以。但如果并没有直接的空间数据那怎么办呢&#xff1f;比如之前遇到的一个场景&…

chatgpt赋能Python-python3_len__

Python3 len()函数&#xff1a;使用方法和常见应用 在Python中&#xff0c;len()函数是一个内置函数&#xff0c;用于返回对象的长度或元素的个数。它适用于字符串、列表、元组、字典、集合等Python数据类型。在本篇文章中&#xff0c;我们将深入探讨Python3 len()函数的使用方…

C++ [STL之string模拟实现]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT STL之string模拟实现 前言正文存储结构默认成员函数构造函数析构函数拷贝构造函数赋值重载 容量操作类获取字符串长度size获取当前容量capacity查询是否为空串emptyreserve扩容调整字符串大小si…

基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器

基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器 0. 前言1. DHT11驱动原理2. 完整代码3. 演示效果4. 其他FreeRtos文章 0. 前言 开发环境&#xff1a;ESP-IDF 4.3 操作系统&#xff1a;Windows10 专业版 开发板&#xff1a;自制的ESP32-WROOM-32E 准备一个DHT11温湿度传…

【Element-ui】el-table大数据量渲染卡顿问题

1、场景描述 在项目开发中&#xff0c;遇到在表格中一次性加载完的需求&#xff0c;且加载数量不少&#xff0c;有几百几千条&#xff0c;并且每条都可能有自己的下拉框&#xff0c;输入框来做编辑功能&#xff0c;此时普通的el-table肯定会导致浏览器卡死&#xff0c;那么怎么…

Windows10 双网卡配置,轻松实现内外互通

1 背景 我平常需要连接外网查阅资料&#xff0c;聊天等&#xff0c;做实验时需要将写到的代码打包部署到内网服务器中&#xff0c;所以需要频繁地切换内外网&#xff0c;修改静态网络配置。很是苦恼。 2 方法 最近&#xff0c;我找到了几种解决办法。 方法一、…

uniapp DIY可视化工具 控件拖拽工具怎么开发/拖拽库/模板引擎

uniapp DIY可视化工具 控件拖拽工具怎么开发 答&#xff1a;需要 (**拖拽库**) &#xff08;**模板引擎**&#xff09;代码自动生成 python有哪些模板引擎 Jinja2是一个小型但快速且易于使用的以纯python编写的独立模板引擎&#xff08;最主要的模板&#xff09;Chameleon是T…

深度学习之卷积神经网络(CNN)

大家好&#xff0c;我是带我去滑雪&#xff01; 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种基于深度学习的前馈神经网络&#xff0c;主要用于图像和视频识别、分类、分割和标注等计算机视觉任务。它主要由卷积层、池化层、全连接…

【开源、应用】QT—TCP网络上位机的设计

本文设计一个终端控制的上位机软件&#xff08;如“设计目标”下图所示&#xff09;&#xff0c;可以和STM32、Adruino等通信实现无线局域网控制系统。 本文的通信内容和图表内容可以参考作者之前的文章 STM32ESP8266连接电脑Qt网络上位机——QT篇https://blog.csdn.net/qq_53…

【STM32G431RBTx】备战蓝桥杯嵌入式→决赛试题→第六届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.ADC:开启ADCsingle-ended 3.LED:开启PC8-15,PD2输出模式就行了…

【JVM001】宋红康JVM字节码举例

宋红康JVM字节码举例 1 Integer package jvmT; public class IntegerTest {public static void main(String[] args) {Integer i 5;int y 5;System.out.println(iy); //trueInteger i6 5;Integer y6 5;System.out.println(i6y6);//trueInteger i5 128;Integer y5 128;System.…