【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录

  • 1. 概述
  • 2. 网络传输安全
    • 2.1.什么是中间人攻击
    • 2.2. 加密和签名
      • 2.2.1.加密算法
      • 2.2.2.摘要
      • 2.2.3.签名
    • 2.3.数字证书
      • 2.3.1.证书的使用
      • 2.3.2.根证书
      • 2.3.3.证书链
    • 2.4.HTTPS

1. 概述

本篇主要是讲解讲一些安全相关的基本知识(如加密、签名、证书等),以及HTTPS如何实现的信息安全传输 不涉及复杂的底层逻辑

在CS架构中,客户端和服务端之间的网络交互一般是使用HTTP协议来完成的,在HTTP协议的请求体和响应体中会包含一次请求的报文(或者说参数),而这些参数往往是明文传输的,有可能会被有心之人拦截,从而获取到参数中的敏感或保密的信息。因此,HTTPS(Hyper Text Transfer Protocol Secure) 应运而生,它在 HTTP(超文本传输协议)的基础上通过传输加密身份认证保证了传输过程的安全性。

2. 网络传输安全

2.1.什么是中间人攻击

在开篇中提到了HTTP协议是不安全的,这种不安全主要体现在两个方面:信息泄露信息伪造,在客户端和服务器中间,有一个中间人可以接收到响应传输的信息。
在这里插入图片描述

  • 信息泄露:中间人可以获取到传输过程中的敏感、保密信息。
  • 信息伪造:中间人可以将自己伪造成客户端或服务器,发送虚假信息。

上述的情况,一般会被称为中间人攻击,在日常使用网络的过程中,如果没有注意网络的安全,例如:使用了未知的公用WiFi、使用了不安全的网络设备、木马感染、DNS劫持等,都容易遭到中间人攻击。


显然,我们不能只通过用户自行注意网络的使用来解决信息传输安全问题,所以我们应该建立安全的传输机制,涉及到两个重要的概念:加密签名

2.2. 加密和签名

2.2.1.加密算法

在这里插入图片描述
所谓加密,就是将原有明文信息通过加密算法转换成为一串没有确认含义,无法识别的字符,也就是密文信息,这样即使信息泄露出去,获取信息的人也无法识别其含义,起到保密的效果。

通过是否能将密文信息重新解密成明文信息的维度,将加密算法区分为:单向加密算法和双向加密算法。

  • 单向加密算法:无法解密,常见的算法是MD5SHA256,一般运用在生成摘要信息保存用户密码等场景。
  • 双向加密算法:可以解密,最常见的算法是AES与RSA,一般运用在信息传输中,保证信息传输的安全性。

在双向加密算法中,要达成解密的效果,会在加密和解密时使用到密钥,通过加解密是否使用同一个密钥,将双向加密算法区分为:对称加密算法和非对称加密算法。

  • 对称加密:通过一把密钥加密和解密,客户端和服务端都持有相同的密钥。
  • 非对称加密:将密钥分为公钥私钥,公钥加密时只能用私钥解密,反之,私钥加密时,只能用公钥解密。两种加密方式使用场景不用,其中公钥加密是将信息转换为密文,防止信息泄露,而私钥加密是用于签名,用于身份认证(即确认是某个人、某个公司机构等发送的信息)。

对比一下对称加密和非对称加密,对称加密速度快,密钥安全性不高。非对称加密速度相对较慢,通过对外只暴露公钥的方式增强了密钥的安全性,同时由于其特性,还可以做身份认证。


说到这里,提一嘴脱敏,加密和脱敏容易混淆。
加密是将明文信息转换为密文信息,密文中无法提炼出有用的信息。
脱敏则是对原有的明文信息做部分修改覆盖,避免敏感信息暴露的同时,还保留了一部分有用的业务信息,常见的就是姓名、身份证、手机号等数据通过 * 替换掉中间一部分数据。

2.2.2.摘要

对传输的信息做加密是为了防止信息泄露,那么摘要和签名就是为了防止信息伪造。

所谓摘要,就是一串和内容相关的哈希值,通过单向加密算法,如SHA256,将原文生成生成一个256位的二进制串。只要原文发生了任何改动,这个摘要信息都将会完全不同。
在这里插入图片描述
通过这样的特性,在不需要对原文进行逐字逐句对比的情况下,快速的验证原文是否被修改了。
在一些开源软件的下载页面,除了源码包之外,还有摘要包下载,用户可以下载之后,用样的算法做摘要,通过比较摘要的值确认源码是否被修改。


当然,除了被有心人篡改了源码内容之外,摘要验证往往还会用于校验文件的完整性。(例如因为网络等原因导致源文件没有下载完整的情况)

2.2.3.签名

签名是一种更高级的安全措施,可以同时验证信息完整性和信息真实性,它是在摘要的基础上,通过非对称加密算法对摘要信息做了一次加密。

所谓信息的真实性,就是指信息来源于官方发布而不是由第三方篡改的。
拿上面的例子来说,由于SHA256是通用算法,第三方拿到源码包并篡改后,重新生成了一个摘要包,将这两个包都放在伪造的网站上,用户下载之后无法验证来源的真实性。在这种场景下,官方可以通过非对称加密算法,使用私钥对摘要做加密,用户下载了签名之后,通过官方发布的公钥进行解密,再将原始摘要与新生成的摘要做对比,以此来确认下载的源码的真实性。

在这里插入图片描述
不同的网站可能会使用不同的加解密算法,细节上有细微的差异,但大体的流程都如上图所示。在Maven的官网中,下载界面就可以下载这三种包:
在这里插入图片描述
通过上面的verify the signature以及KEYS可以获取到校验方法及对应的公钥。
在这里插入图片描述

2.3.数字证书

2.3.1.证书的使用

数字证书是一种包含了公钥、所属组织信息、证书颁发机构、证书签名等信息的数字文件。
如果做过金融支付相关的业务,对接过银行或者三方支付平台的话,或多或少都会接触当数字证书。
这样的证书,多数情况是的就是通过操作系统生成的一个自签名的证书文件。我们在按照接口文档写完代码之后,下一步就是互相交换数字证书,在后续的接口调用过程中,会使用到对方的数字证书做签名验证,防止支付中的关键信息被中间人篡改。

而在CS架构中,客户端想要获取证书,在第一次访问网站时会从服务器中拉取证书,这种情况下,自签名的数字证书无法保证通信的安全性。
在这里插入图片描述
在这种情况下,要保证信息传输的安全,客户端就需要有一种机制可以验证证书的合法性。
这种机制就是在当两方无法确认对方的身份时,引入一个权威的第三方做身份确认,而这里的第三方指的就是根证书

2.3.2.根证书

所谓的根证书,就是各个权威的CA(Certificate Authority)机构的自签名证书,它们会预装在操作系统中的证书,用于浏览器或其他类型的客户端校验服务器提供的证书合法性。国内常见的CA机构有:CFCA、BJCA、SHECA等。

打开谷歌浏览器的证书管理,可以看到这样的内容:
在这里插入图片描述
点进去之后就可以看到预装的根证书了
在这里插入图片描述

企业机构可以通过权威的CA机构申请证书,将证书安装到服务器上,这样客户端就能校验出这个正式是否合法了。
在这里插入图片描述

2.3.3.证书链

处于根证书安全管理的灵活性业务需要等原因,企业申请的证书往往不是由根证书直接签发的,而是由一个层次关系:
在这里插入图片描述
这样的层次关系叫做证书链,在客户端访问服务器的时候,客户端会获取到服务器返回的证书链,再通过递归的方式一层层的向上校验,直到根证书校验通过。

2.4.HTTPS

在使用HTTPS协议时,客户端会通过TLS与服务器握手尝试建立一个安全连接通道,后续的请求都是通过这个通道来执行的。

在这里插入图片描述
这种设计方式既利用了非对称加密的安全性,又利用了对称加密的性能。后续的数据传输都是通过客户端生成的对称密码来进行加密和签名的。

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

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

相关文章

SpringMVC

开发模式: (1)前后端不分离:服务端渲染 数据和结构并不分离,客户端发送请求后访问指定路径资源,服务端业务处理之后将数据组装到页面,并返回带数据的完整页面。 (2)前…

uni-app编写微信小程序使用uni-popup搭配uni-popup-dialog组件在ios自动弹出键盘。

uni-popup-dialog 对话框 将 uni-popup 的type属性改为 dialog&#xff0c;并引入对应组件即可使用对话框 &#xff0c;该组件不支持单独使用 示例 <button click"open">打开弹窗</button> <uni-popup ref"popup" type"dialog"…

UML系列之Rational Rose笔记九:组件图

一、新建组件图 二、组件图成品展示 三、工作台介绍 最主要的还是这个component组件&#xff1b; 然后还有这几个&#xff0c;正常是用不到的&#xff1b;基本的使用第四部分介绍一下&#xff1a; 四、基本使用示例 这些&#xff0c;主要是运用package还有package specifica…

数据结构《MapSet哈希表》

文章目录 一、搜索树1.1 定义1.2 模拟实现搜索 二、Map2.1 定义2.2 Map.Entry2.3 TreeMap的使用2.4 Map的常用方法 三、Set3.1 定义3.2 TreeSet的使用3.3 Set的常用方法 四、哈希表4.1 哈希表的概念4.2 冲突4.2.1 冲突的概念4.2.2 冲突的避免1. 选择合适的哈希函数2. 负载因子调…

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂&#xff0c;在苦难中萃取的坚韧才值得珍视&#xff1b; 痛苦同样不必美化&#xff0c;从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角&#xff0c; 但每个人又都是自己生活剧本里的英雄。滑雪&#xff0c;是姿态优雅的“贴地飞行”&#xff0c;也有着成…

qt vs ios开发应用环境搭建和上架商店的记录

qt 下载链接如下 https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg 安装选项全勾选就行&#xff0c;这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟&#xff0c;但很多特性还得qt6才行&#xff0c;这里用qt5.14.2主要是考虑到服…

JavaSE学习心得(反射篇)

反射 前言 获取class对象的三种方式 利用反射获取构造方法 利用反射获取成员变量 利用反射获取成员方法 练习 保存信息 跟配置文件结合动态创建 前言 接上期文章&#xff1a;JavaSE学习心得&#xff08;多线程与网络编程篇&#xff09; 教程链接&#xff1a;黑马…

FPGA 串口与HC05蓝牙模块通信

介绍 关于接线&#xff1a;HC-05蓝牙模块一共有6个引脚&#xff0c;但经过我查阅资料以及自己的实操&#xff0c;实际上只需要用到中间的4个引脚即可&#xff08;即RXD,TXD,GND,VCC&#xff09;。需要注意的是&#xff0c;蓝牙模块的RXD引脚需要接单片机的TXD引脚&#xff0c;同…

基于CiteSpace的知网专利文献计量分析与可视化

CiteSpace是一款可视化学术文献分析软件&#xff0c;它可以帮助用户分析和可视化研究领域的文献数据。适用于分析大量文献数据&#xff0c;例如由 Web of Science、Scopus 和知网等学术数据库生成的数据。图为来自CiteSpace的成图&#xff0c;是不是很美观&#xff1f;接下来我…

Gitee图形界面上传(详细步骤)

目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe&#xff0c;顺序不能搞错2. …

深入了解生成对抗网络(GAN):原理、实现及应用

生成对抗网络&#xff08;GAN, Generative Adversarial Networks&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型&#xff0c;旨在通过对抗训练生成与真实样本相似的数据。GAN在图像生成、图像修复、超分辨率等领域取得了显著的成果。本文将深入探讨GAN的基…

Git的基本命令以及其原理(公司小白学习)

从 Git 配置、代码提交与远端同步三部分展开&#xff0c;重点讲解 Git 命令使用方式及基本原理。 了解这些并不是为了让我们掌握&#xff0c;会自己写版本控制器&#xff0c;更多的是方便大家查找BUG&#xff0c;解决BUG &#xff0c;这就和八股文一样&#xff0c;大多数都用…

信号与系统初识---信号的分类

文章目录 0.引言1.介绍2.信号的分类3.关于周期大小的求解4.实信号和复信号5.奇信号和偶信号6.能量信号和功率信号 0.引言 学习这个自动控制原理一段时间了&#xff0c;但是只写了一篇博客&#xff0c;其实主要是因为最近在打这个华数杯&#xff0c;其次是因为在补这个数学知识…

【初识扫盲】厚尾分布

厚尾分布&#xff08;Fat-tailed distribution&#xff09;是一种概率分布&#xff0c;其尾部比正态分布更“厚”&#xff0c;即尾部的概率密度更大&#xff0c;极端值出现的概率更高。 一、厚尾分布的特征 尾部概率大 在正态分布中&#xff0c;极端值&#xff08;如距离均值很…

--- 多线程编程 基本用法 java ---

随着时代的发展&#xff0c;单核cpu的发展遇到了瓶颈&#xff0c;而要提高算力就要发展多核cpu&#xff0c;他能允许多个程序同时运行&#xff0c;这时并发编程他能利用到多核的优势&#xff0c;于是就成为了时代所趋了 其实多进程编程也能进行实现并发编程&#xff0c;只不过…

Linux网络_套接字_UDP网络_TCP网络

一.UDP网络 1.socket()创建套接字 #include<sys/socket.h> int socket(int domain, int type, int protocol);domain (地址族): AF_INET网络 AF_UNIX本地 AF_INET&#xff1a;IPv4 地址族&#xff0c;适用于 IPv4 协议。用于网络通信AF_INET6&#xff1a;IPv6 地址族&a…

idea分支合并代码

步骤一 首先把两个分支的代码都提交了&#xff0c;保持和远程仓库一致&#xff0c;不要有任何没提交的代码。如果一些程序的yml配置文件&#xff0c;不想提交&#xff0c;可以复制一个&#xff0c;不受git管理。如果有没有提交的代码&#xff0c;合并分支的时候就会提示那些代…

Java安全—SPEL表达式XXESSTI模板注入JDBCMyBatis注入

前言 之前我们讲过SpringBoot中的MyBatis注入和模板注入的原理&#xff0c;那么今天我们就讲一下利用以及发现。 这里推荐两个专门研究java漏洞的靶场&#xff0c;本次也是根据这两个靶场来分析代码&#xff0c;两个靶场都是差不多的。 https://github.com/bewhale/JavaSec …

docker虚拟机平台未启用问题

在终端中输入如下代码&#xff0c;重启电脑即可 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform 对于Docker Desktop - Unexpected WSL error问题 参考链接 解决WSL2与docker冲突问题

微服务主流框架和基础设施介绍

概述 微服务架构的落地需要解决服务治理问题&#xff0c;而服务治理依赖良好的底层方案。当前&#xff0c;微服务的底层方案总的来说可以分为两 种&#xff1a;微服务SDK &#xff08;微服务框架&#xff09;和服务网格。 微服务框架运行原理&#xff1a; 应用程序通过接入 SD…