浅谈https

1.网络传输的安全性

  • http 协议:不安全,未加密
  • https 协议:安全,对请求报文和响应报文做加密

在这里插入图片描述

2.对称加密与非对称加密

2.1 对称加密

  • 特点:

    加解密使用 相同 秘钥 高效,适用于大量数据的加密场景 算法公开,安全性取决于秘钥大小,但秘钥越大效率越低,需要权衡在安全和效率中做权衡

  • 缺点:

    算法本身安全,但使用场景不够安全,因为解密和加密都是同一个秘钥

在这里插入图片描述

2.2 非对称加密

使用 匹配的一对密钥分别进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)

注意:公钥加密的数据 只能 用 对应的私钥解密,同理,私钥加密的数据 只能用 对应的公钥解密

算法:RSA、ECC、Elgamal、背包算法、Rabin、D-H 等

特点:安全性高

缺点:加解密复杂,效率低,耗时较长

用法概要:

  • 加密:对数据做加密
  • 签名:证明数据是谁发的

2.3 非对称加密用法

  • 准备工作:

    1.生成一对匹配的 私钥 和 公钥 (ps:公钥其实是根据私钥生成的)

    2.将公钥公布给外界

在这里插入图片描述

2.3.1 公钥加密
  • 场景: 用来针对互联网上加密数据传递

    Linda 用 James的公钥 对数据进行加密,然后发给 James,James用自己的私钥解密

在这里插入图片描述

因为一个公钥加密的数据 只有 对应的 私钥才能解密,所以密文很安全

补充:如果要在网络上相互发送密文,可以让对方也发对方的公钥过来,用对方的公钥来加密

2.3.2 私钥签名
  • 场景: 目的是为了将明文公布给别人,同时证明是自己发的;可以防止明文被篡改。

    第一步: James 用 James的私钥 对明文的hash值进行加密,把密文(签名)和明文一起发给 Linda

    在这里插入图片描述

    第二步: Linda 用 James的公钥 进行解密,解密后的明文hash值 和 接收到的明文的hash值进行对比,如果一样则是 James 发的

    在这里插入图片描述

3. https协议

  • 端口 443

3.1 基本流程

在这里插入图片描述

1 http明文方式传输

数据在传输过程中未加密,有被窃取的可能,不安全。

2 采用对称加密

对称加密——加解密使用 相同 秘钥

如果采用对称加密的话,通信双方使用同一把秘钥进行加密解密,即在传输的时候,需要把 加密后的密文 连同 秘钥 一起在网络上进行传输,这样才能使对方在拿到密文后能够使用该密钥顺利进行解密。

问题:如果在传输过程了截取了密文和秘钥,则信息不安全。

3 采用非对称加密

非对称加密 使用 匹配的一对密钥分别进行加密和解密

公钥加密的数据 只能 用 对应的私钥解密,同理,私钥加密的数据 只能用 对应的公钥解密

服务器生成一对公钥和私钥,并把 公钥 发送给浏览器,浏览器将要发送的数据用 服务器公钥 加密后形成密文发送给服务器。服务器拿到密文后用 自己的私钥 对密文进行解密。

问题:如果在给浏览器发送公钥的过程中被黑客截取并篡改成黑客的公钥,浏览器接收到黑客公钥后用其对数据进行加密形成密文。在将密文送给服务器的过程中黑客截取该密文,由于该密文是使用篡改过的黑客公钥进行加密的,则可以用与之对应的黑客私钥进行解密,则信息不安全。

4 如何保证浏览器拿到的服务器公钥是真实有效的

证书认证机构CA(Certificate Authority)也有自己的公钥和私钥,并把自己的公钥内置在各大计算机操作系统中。

服务器生成一对公钥和私钥,并把 公钥 发送给CA,CA通过该服务器的公钥、该服务器的域名、证书有效期等生成 SSL/TLS 证书 ,然后该服务器存储好自己的证书。

进行通信时,浏览器拿到服务器的证书(包含服务器的公钥和域名等),之后用浏览器所在计算机系统中保存的CA公钥对此证书进行解密,得到服务器的公钥。(解密成功:获取公钥——只要解密成功,就说明 是 机构认证的;解密失败:认证失败)

此番操作的目的是为了保证服务器的 公钥 在传输过程中不会被篡改。

之后延续2的流程,浏览器将要发送的数据用 服务器公钥 加密后形成密文发送给服务器。服务器拿到密文后用 自己的私钥 对密文进行解密。

问题:在数据量大的情况下使用非对称加密时,加解密复杂,效率低,耗时较长

5 非对称加密 + 对称加密

在4的基础上,浏览器不要将发送的数据用 服务器公钥 进行加密。

浏览器生成一个 对称加密 的秘钥(会话密钥)。浏览器用 服务器公钥 对 会话密钥 进行加密,之后将加密过后的会话密钥发送给服务器。服务器拿到加密的会话密钥之后,用自己的 私钥 进行解密,得到解密过后的会话密钥。经过上述流程,浏览器和服务器均获得相同的一把对称加密的秘钥(会话密钥)

从此以后:

浏览器通过 会话密钥 对 请求报文 做加密,服务器通过 会话密钥 对 请求报文 做解密;

服务器通过 会话密钥 对 响应报文 做加密,浏览器通过 会话密钥 对 响应报文 做解密;

非对称算法只用在对会话密钥进行加解密上,而数据量大的请求报文则是采用了高效的对称算法

6 https流程总结

  • 服务器生成一对私钥和公钥(非对称加密)

  • 通过 CA私钥 加密 生成 服务器证书(服务器公钥、域名…),计算机中已内置 CA公钥

  • 浏览器 拿证书,并用内置的 CA公钥 解密得到 服务器公钥

  • 浏览器生成 会话密钥(对称加密),浏览器用 服务器公钥 对自己的 会话密钥 进行加密后发送给服务器。服务器用自己的私钥对 会话密钥 进行解密。

  • 浏览器和服务器 使用 会话秘钥 来对 请求报文 和 响应报文 做加密

3.2 证书认证机构

  • 如果证书颁发机构过多的话,不容易识别,防伪和管理,于是形成了少数几家国际权威的证书颁发机构,这些机构非常权威,默认是所有人都可信的,它们成为根证书。
  • 但是除了这些机构外,其他的机构也需要被信任,因而,需要这些权威的机构去授信颁发证书,于是就形成了一级证书机构,一级证书机构又可以继续授信下级机构,于是成为树状结构,对于任何一个组织到根证书就是链状结构。

3.3 CA证书的保存

  • 保存在系统中

控制面板上Internet选项里

在这里插入图片描述

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

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

相关文章

C++STL的string类(一)

文章目录 前言C语言的字符串 stringstring类的常用接口string类的常见构造string (const string& str);string (const string& str, size_t pos, size_t len npos); capacitysize和lengthreserveresizeresize可以删除数据 modify尾插插入字符插入字符串 inserterasere…

7.3 Windows驱动开发:内核监视LoadImage映像回调

在笔者上一篇文章《内核注册并监控对象回调》介绍了如何运用ObRegisterCallbacks注册进程与线程回调,并通过该回调实现了拦截指定进行运行的效果,本章LyShark将带大家继续探索一个新的回调注册函数,PsSetLoadImageNotifyRoutine常用于注册Loa…

学习IO的第五天

作业 &#xff1a;使用两个线程完成文件的拷贝写入&#xff0c;分线程1写入前半段&#xff0c;分线程2写入后半段&#xff0c;主线程用来回收资源 #include <head.h>void *sork(void *arg); void *sork2(void *arg);int file_copy(int start,int len) //拷贝的函数 {i…

Linux_vi/vim编辑器

3.VI 与 VIM 3.1概述 vi编辑器&#xff1a;是Linux和Unix上最基本的文本编辑器&#xff0c;工作在字符模式下。由于不需要图形界面&#xff0c;vi是效率很高的文本编辑器。 vim是&#xff1a;vi的增强版&#xff0c;比vi更容易使用。vi的命令几乎全部都可以在vim上使用。 3…

Qt图形设计

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置//设置窗口标题this->setWindowTitle("王者荣耀");//设置窗口图标this->setWindowIcon(QIcon("C:\\Users\\28033\\Pictures\\Saved Pictures\\pict…

ESP32单片机案例

工具&#xff1a;VScode PlatformIO IDE 注&#xff1a;B站视频学习笔记。 1、继电器 1&#xff09;硬件电路 2&#xff09;程序 #include <Arduino.h> #define RELAY_PIN 15//初始化定时器 hw_timer_t *timer NULL;void timer_interrupt(){ //将引脚传入的电平信号…

二、范围管理

1、范围管理的6个子过程 &#xff1a;规、集、定、创、确、控 规划范围管理&#xff1b; 收集需求&#xff1b; 定义范围&#xff1b; 创建WBS&#xff08;创建工作分解结构&#xff09;&#xff1b; 确认范围&#xff1b; 控制范围。 2、范围管理各过程的输入、输出、工具与…

公众号word文档

在数字化时代&#xff0c;信息的快速获取和高效整理变得尤为重要。微信公众号作为信息传播的重要平台&#xff0c;其内容经常需要被转换成更易于编辑和存档的格式&#xff0c;如Word文档。这里&#xff0c;我们将介绍如何利用“微附件”小程序实现这一过程&#xff0c;并分享一…

第二十一章

网络通信这一章 基本分为三个部分 网络基础概念和TCP,UDP这三个部分主要如下&#xff1a; 计算机网络实现了堕胎计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xf…

利用 Python 进行数据分析实验(三)

一、实验目的 使用Python解决简单问题 二、实验要求 自主编写并运行代码&#xff0c;按照模板要求撰写实验报告 三、实验步骤 本次实验共有4题&#xff1a; 自行给定一个从小到大排好序的数组&#xff0c;输入一个数并将其插入到原始数组中&#xff0c;新的数组还是满足从…

【Effective C++】条款5:了解C++默默编写并调用了哪些函数

某些情况下&#xff0c;编译器会拒绝为你提供默认构造函数 template<class T> class NameObject { public:NameObject(string& name, const T& object):nameValue(name),objectValue(object){} private:string& nameValue;const T objectValue; };int main(…

mixamo根动画导入UE5问题:滑铲

最近想做一个跑酷游戏&#xff0c;从mixamo下载滑铲动作后&#xff0c;出了很多动画的问题。花了两周时间&#xff0c;终于是把所有的问题基本上都解决了。 常见问题&#xff1a; 1.【动画序列】人物不移动。 2.【动画序列】人物移动朝向错误。 3.【蒙太奇】人物移动后会被拉回…

java的多线程技术概览

java的多线程技术 前言今天学习大纲是多线程第一步&#xff1a;学习基础知识第二步&#xff1a;深入学习第三步&#xff1a;实践项目第四步&#xff1a;深度理解高级主题 前言 时代变了&#xff0c;旧的知识需要重新拿起&#xff0c;今天开始记录自己所学同时也是给自己一个复…

谈谈 .NET8 平台中对 LiteDB 的 CRUD 操作

哪个啥&#xff01;纯 C# 编写的 LiteDB 你还不会操作&#xff1f; LiteDB 简介LiteDB 安装1、同步版 LiteDB2、异步版 LiteDB.Async LiteDB StudioLiteDB CRUD 操作举例1、.net cli 命令创建项目2、项目添加相关 nuget 包3、改造项目结构4、改造项目代码 LiteDB vs SQLite 对比…

PostgreSQL 实现 Oracle 多表插入语句

Oracle 数据库提供了一个多表插入功能&#xff0c;也就是 INSERT ALL 语句。这个功能可以方便数据仓库中的 ETL 操作&#xff0c;基于不同逻辑将数据插入一个或者多个不同的表中。 PostgreSQL 被称为开源领域的 Oracle&#xff0c;虽然没有提供 INSERT ALL 语句&#xff0c;但…

用c#实现记事本的功能

知识点&#xff1a; openFileDialog1 是一个 Windows 窗体应用程序中的控件&#xff0c;用于实现文件选择对话框的功能。它是 System.Windows.Forms.OpenFileDialog 类的一个实例。 OpenFileDialog 控件允许用户浏览文件系统并选择要打开的文件。它提供了一些属性和方法&#x…

怎样挖掘客户的需求?有哪些方法?

需求是什么&#xff1f; 需求是人们在某一特定的时期内在愿意付出各种可能的成本&#xff08;时间、精力、现金&#xff09;购买某个具体或者虚拟的商品、服务的数量或数量集合。例如肚子饿了又懒得做&#xff0c;在线点餐外送就是一种需求&#xff0c;用户愿意多花费比线下饭…

JAVA8时间日期类详解

JAVA8 时间日期类 LocalDateTime类(用于代替Date类使用) 用于表示没有时区信息的日期和时间,这个类是不可变的,线程安全的,用于处理日期和时间 LocalDateTime类常用API 常用方法 方法名说明public static LocalDateTime now()获取当前日期与时间public static LocalDateTi…

MySQl int(1)、int(20) 的区别到底在哪里

MySQl int(1)、int(20) 的区别到底在哪里 常思一二&#xff0c;便得自然… int(1)数据类型介绍 在MySQL中&#xff0c;INT(1) 是一种定义整数类型的数据字段&#xff0c;其中的数字表示显示宽度而不是存储范围。具体说&#xff0c;INT(1) 中的数字 1 表示显示宽度&#xff0…

前端小技巧: 写一个异步程序示例, 使用任务队列替代promise和async/await等语法糖

异步程序设定场景 1 &#xff09;场景设定 可以使用懒人每做几件事&#xff0c;就要休息一会儿&#xff0c;并且不会影响做事的顺序这种场景来模拟定义单例名称为: lazyMan支持 sleep 和 eat 两个方法支持链式调用 2 ) 调用示例 const lm new LazyMan(www) lm.eat(苹果).…