【计算机网络】什么是HTTPS?HTTPS为什么是安全的?

【面试经典题】

前言:

HTTP最初的设计就是用于数据的共享和传输,并没有考虑到数据的安全性,如窃听风险,篡改风险和冒充风险。HTTPS是在 HTTP 的基础上引入了一个加密层。HTTPS通过数据加密,数据完整性检验和身份认证有效的保证了数据传输的安全性。HTTP默认端口号80,HTTPS默认端口号是443。是接下来说说这些方法具体是咋实现的。

HTTPS:这里的S指的是TLS(前身是SSL,后来更名了)传输层安全协议。可以理解为HTTPS=HTTP+TLS。TLS是一种安全性协议。旨在保障通信数据的保密性,完整性,真实性。TLS位于应用层和传输层之间。 

TLS的发展历程

    

HTTP为什么不安全?

互联网上任何数据包的传输,都需要经过许许多多的网络设备如路由器等,如果其中一台设备是恶意的,或者被恶意的人劫持(如黑客),那传输的数据就可能会被窃取或者修改。并且HTTP是明文传输的,传输的数据没有进行任何加密。数据就会被轻易窃取。并且数据没有经过任何的校验,要是数据被篡改,也无法感知。并且通信双方也没有进行身份认证,就会存在通信对象可能不是目标对象的情况,如黑客冒充成客户端或者服务器端与对方进行交互。

综上所述:HTTP存在以下三种安全风险:

  1. 窃听风险
  2. 篡改风险
  3. 冒充风险

HTTPS的工作过程

对于如何解决第一种风险,我们首先能想到的是进行加密,加密有两种,对称加密和非对称加密。

1.使用对称加密

这种对称加密使用同一种秘钥,秘钥是由客户端这边生成的,不同的客户端秘钥不同,然后向服务器发送,并于服务器约定使用这个秘钥传输。秘钥既可以加密也可以解密,虽然数据传输进行了加密,但秘钥在传输过程中并没有被加密,就会容易被截获,截获的人就可以通过秘钥解密数据,造成风险。


2.使用非对称加密

如上图所示,加密过程共有四步: 

  1. 首先浏览器向服务器发送获取公钥的请求,
  2. 服务器收到请求返回自己的公钥,
  3. 浏览器收到公钥后,将请求数据和公钥通过加密算法进行加密生成密文,然后发送给服务器。
  4. 服务器收到密文后,用私钥和密文通过解密算法获得明文数据,然后服务器又将响应数据使用私钥加密后发给浏览器,浏览器收到密文再通过公钥进行解密。

这种加密显然优于第一种,非对称加密使用一对秘钥,公钥和私钥,公钥是公开的,私钥是仅服务器拥有的。非对称加密的特点是通过公钥加密的密文必须由私钥解密,通过私钥加密的密文必须由公钥解密。但是纯使用非对称加密这种也有缺点,一是效率太慢(因为涉及到复杂的数学运算)

二是传输过程中公钥是可以被截获的,并且第四步服务器返回响应是通过私钥加密的,截获公钥的不法分子就能够通过公钥解密。


3.使用非对称加密+对称加密

如上图所示,非对称加密过程共有五步:

  1. 浏览器向服务器发起获取非对称加密公钥的请求。
  2. 服务器收到请求返回自己的公钥。
  3. 浏览器将对称加密秘钥使用公钥加密后发送给服务器,服务器收到密文使用自己的私钥解密后获得对称加密秘钥。
  4. 浏览器将请求数据使用对称加密秘钥加密后发送给服务器。
  5. 服务器使用刚才获得的对称秘钥对密文进行解密,得到请求数据。服务器根据请求处理数据,服务器将响应数据使用对称秘钥加密后发给浏览器,浏览器使用对称秘钥解密后获得响应。

非对称加密主要用来传输对称加密的秘钥,而不是传输业务数据。传输业务数据交给对称加密。这样就算不法分子能够拿到公钥,也无济于事。我们的目标是让对称加密的秘钥安全的发送给服务器。发送过去后,剩下的数据传输就全部用秘钥进行加密解密。总的来说就是两种加密方式的加密对象不同。作用时间不同。这样做就可以有效防止窃听风险。但还不够,魔高一尺道高一丈。如果黑客冒充服务器并伪造公钥该咋办?

非对称加密为什么要引入对称加密?

因为非对称加密/解密,运算成本是比较高的,运算速度也比较慢;而对称加密运算成本低,速度快。上文中单单使用对称加密不安全是因为秘钥在传输过程中没有加密,容易被截获。即使用对称加密的要害是传输秘钥。如果我们使用非对称加密进行传输对称秘钥,然后在后面的数据传输中均使用对称加密。这样相互配合,就可以在保证安全的同时,效率也提高。如果整个过程都是用非对称加密传输,传输效率会大打折扣。


3.1详解冒充风险

不法分子是如何冒充的?

客户端向服务器请求公钥后,服务器会返回一个公钥,但在这个中间,公钥存在被截获的风险,黑客这边提前自己也生成一对公钥和私钥,截获后黑客就可以将公钥替换成自己的。但是客户端不知道,就会拿着黑客提供的公钥进行加密,然后传给服务器,中间又会被黑客截获,由于公钥是黑客的,那自然黑客手中的秘钥就能对它解密,这个过程中黑客就获得了秘钥,这时通信双方并没有正式进行数据通信,黑客继续伪装,使用之前截获的服务器的公钥(不是伪造的,如果这里伪造,数据传到服务器那边是解不开的)对秘钥加密,发送给服务器。服务器使用私钥解密,于是双方就约定使用这个秘钥进行数据传输了,殊不知秘钥已经被黑客截获了。后续黑客只需要通过秘钥就能轻松地获取数据了。这个过程的关键是秘钥被黑客给截取了。


4.使用证书机制

解决上述冒充问题的办法就是进入公证机构。在客户端和服务器起初建立连接时,服务器就给客户端返回一个证书。这个证书就好比人的身份证,用来作为网站的身份标识。而每搭建一个 HTTPS 网址时都需要在认证机构申请一个证书。

证书含有的重要信息:

  • 证书发布机构
  • 证书有效期
  • 公钥(服务器的公钥)
  • 证书所有者
  • 签名

即在搭建服务器时,服务器会去公证机构申请证书并提交一系列材料。认证成功后,公证机构会给这个服务器颁发证书(证书中就含有公钥)。接下来每次客户端访问服务器时,都会先请求服务器的证书,服务器返回证书给客户端。接下来分两步进行检验:

第一步:检验证书是否合法

万一证书是伪造的,校验证书方式有:

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

证书检验通过后,进行检验证书中的数据是否被篡改过。

第二步:检验证书中数据是否被篡改

目的是为了检验公钥是否被修改过,进行数字签名(其实就是被加密后的校验和), 这里的校验和就是把证书中所有数据的每个字节带入公式就会算出一个结果数字,这个数字就是校验和。为了防止该校验和又被修改,我们对校验和进行了加密。这个加密是由公正机构完成的,公证哪个机构那边也有一对公钥和私钥,其中公钥分发给各个客户端,私钥用来加密校验和。现如今我们的操作系统上已经拥有许多知名认证机构的公钥,客户端收到证书并确认证书无误后,开始使用公钥解密获得检验和(一串数字),同时客户端这白牛也用相同的公式将证书中的数据进行计算得出一个校验和,与解密后的校验和对比,以此来最终确认证书有没有被篡改过。通过后就可以开始进一步传输秘钥,传输数据了。解决冒充问题的关键就是验证这个证书中携带的服务器的公钥是否被修改过。 


常见的计算校验和的算法有MD5 和 SHA,以下以 MD5 为例,介绍其特点:

  • 定长:无论多长的字符串,计算出来的 MD5 值都是固定长度(16字节版本或者32字节版本)
  • 分散:源字符串只要改变一点点,最终得到的 MD5 值都会差别很大
  • 不可逆:通过源字符串生成 MD5 很容易,但是通过 MD5 还原成原串理论上是不可能的

由于 MD5 这样的特性,因此可以认为如果两段数据的 MD5 值相同,则这两段数据相同。

总结:

  1. 对称加密:由客户端生成的对称密钥,用于对传输的数据进行加密,需要将该对称密钥告知给服务器。
  2. 非对称加密: 服务器给客户端提供一个公钥(私钥自己持有),将公钥传发送给客户端,客户端使用公钥对对称密钥进行加密,将密文传送给服务器。
  3. 证书机制: 通过第三方公证机构,向网站颁发证书,该证书里面就含有服务器的公钥。客户端首先向服务器请求证书,客户端拿到证书后进行校验,如果证书合法并且证书里的数据没有被篡改,就使用里面的公钥对对称密钥进行加密。
     

通过上面三种方式的结合,就可以保证传输过程中的安全了。

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

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

相关文章

【Java 进阶篇】Java登录案例详解

登录是Web应用程序中常见的功能,它允许用户提供凭证(通常是用户名和密码)以验证其身份。本文将详细介绍如何使用Java创建一个简单的登录功能,并解释登录的工作原理。我们将覆盖以下内容: 登录的基本概念创建一个简单的…

安装Jdk 报错 ,Java SE Development Kit 8 Update 202(64-bit)安装完毕之前,向导被中断

具体原因没有找到,估计是由于jdk 没有删干净导致的,我的处理方法是,将 Java的注册表全然后手动安装 Jdk和导入注册表(在同事那里获取jdk文件 压缩包,并将 java的注册表导出,放在自己电脑上使用。&#xff0…

ChatGPT扩展系列之ChatExcel

文章目录 ChatGPT扩展系列之ChatExcel对某一列的文字进行处理对数据进行排序对数据进行计算微软官方又推出Excel AI插件ChatGPT扩展系列之ChatExcel 自从ChatGPT很空出世之后,很多基于ChatGPT的应用便如雨后春笋般应用而生,这些应用的底层本质就是利用了ChatGPT对自然语言的…

M1本地部署Stable Diffusion

下载安装 参考博客: 在Mac上部署Stable Diffusion(超详细,AI 绘画入门保姆级教程) 安装需要的依赖库 brew install cmake protobuf rust python3.10 git wget 可能中途会存在下载报错或者下载卡主的问题,需要切国内源 brew进行替换源: …

树莓派 qt 调用multimedia、multimediawidgets、serialport、Qchats

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、测试11.命令安装出现错误 二、测试21. 安装 Qt Charts:2. 安装 Qt Multimedia 和 Qt MultimediaWidgets:3. 安装 Qt SerialPort&…

C/S架构和B/S架构

1. C/S架构和B/S架构简介 C/S 架构(Client/Server Architecture)和 B/S 架构(Browser/Server Architecture)是两种不同的软件架构模式,它们描述了客户端和服务器之间的关系以及数据交互的方式。 C/S 架构&#xff08…

Springboot的Container Images,docker加springboot

Spring Boot应用程序可以使用Dockerfiles容器化,或者使用Cloud Native Buildpacks来创建优化的docker兼容的容器映像,您可以在任何地方运行。 1. Efficient Container Images 很容易将Spring Boot fat jar打包为docker映像。然而,像在docke…

【已解决】取消 el-aside 默认宽度|不再用 !important

文章目录 问题原因解决方法 问题原因 element-ui 的 el-aside 组件有 width props,默认为 300px 解决方法 给 el-aside 标签添加 width"" width 为空(不正确的css样式/写法)样式将会失效。 就可以在 style 中修改 el-aside 宽…

C# “依赖注入” 中的 “三种生命周期”

🚀简介 依赖注入(Dependency Injection,简称DI)是一种实现控制反转(IoC)的技术,用于减少代码之间的耦合度。通过依赖注入,一个类可以从外部获取其依赖的对象,而不是自己…

Hudi系列文章7-RFC24 Flink 写入流程优化

文章目录 前言问题背景瓶颈与解决方案瓶颈一解决方法工作流程:精准一次语义容灾CoorinatorCheckpoint如何配合使用StreamWriteOperatorCoordinator CheckpointedFunctionStreamWriteFunctionInstant 提前生成问题 瓶颈二问题解决方案BucketAssignerBucketWriter 重点…

Java自学者怎么写简历?

Java自学者怎么写简历? 首先,有技术实力的人绝对不会问这个问题。虽然你是自学的,但是一定要有项目!没有项目都是空谈。最近很多小伙伴找我,说想要一些Java资料,然后我根据自己从业十年经验,熬夜…

中间件安全-CVE 复现K8sDockerJettyWebsphere漏洞复现

目录 服务攻防-中间件安全&CVE 复现&K8s&Docker&Jetty&Websphere中间件-K8s中间件-Jetty漏洞复现CVE-2021-28164-路径信息泄露漏洞CVE-2021-28169双重解码信息泄露漏洞CVE-2021-34429路径信息泄露漏洞 中间件-Docker漏洞复现守护程序 API 未经授权访问漏洞…

个人服务器怎么搭建?个人服务器搭建方法

​  个人服务器是指一台由个人拥有和管理的服务器,用于存储和提供个人网站、应用程序或其他在线服务。搭建个人服务器可以让我们更好地掌控自己的数据和网络资源。下面介绍一种常见的个人服务器搭建方法。 第一步:选择合适的硬件 我们需要选择一台适合…

Sketch mac 98.3(矢量绘图设计软件)

Sketch是一款专为Mac设计的矢量图形编辑软件,被广泛应用于UI/UX设计、网页设计、移动应用设计等领域。Sketch提供了各种工具和功能,包括绘图、图形设计、排版等,可以帮助设计师轻松地创建高质量的矢量图形和模型。Sketch的主要特点包括&#…

Git基础命令实践

文章目录 简介git的安装配置git的安装git的配置 git使用的基本流程创建版本库时光机穿梭版本回退工作区和暂存区管理修改撤销修改删除文件 远程仓库添加远程库从远程库克隆 总结 简介 本文主要记录了我在学习git操作的过程,以及如何使用GitHub。建议先参考廖雪峰的…

测试环境内存溢出排查过程

基本信息 客户名称:xxx 产品名称: 版本号: 问题分类:编码问题 环境类型:实体机 问题现象 保险公司测试环境爆内存,机器挂掉。总共64g的内存,在没有开始测试tomcat部署war包前内存使用率为25%左…

提升管理文件效率:批量删除文件名中的特殊符号

在文件管理的过程中,我们经常会遇到文件名中包含特殊符号的情况,这些符号可能会干扰文件的正常运行,特别是在一些特定的软件或系统中。因此,为了提高文件管理的效率和文件的可读性、可操作性,我们需要对这些特殊符号进…

[BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

再补完这个就基本上完了. crypto RSA Variation II Schmidt-Samoa密码系统看上去很像RSA,其中Npqq, 给的eN给了d from secret import flag from Crypto.Util.number import *p getPrime(1024) q getPrime(1024)N p*p*qd inverse(N, (p-1)*(q-1)//GCD(p-1, q-1))m bytes…

Web3 治理实践探讨:如何寻找多元化发展路径?

Web3 领域变革正崭露头角,而社区治理开始成为行业热议话题。Web3 项目如何探寻多元化建设的解困路径,究竟是治理模型的精进成为首要问题,还是吸纳更多资金与组织教育培训,让开发者成为项目建设的中坚力量?本期 TinTinW…

Panda3d 介绍

Panda3d 介绍 文章目录 Panda3d 介绍Panda3d 的安装Panda3d 的坐标系统介绍Panda3d 的运行Panda3d 加载一个熊猫父节点和子节点之间的关系 验证Panda3d 的坐标系统X 轴的平移Y 轴的平移Z 轴的平移X 轴的旋转Y 轴的旋转Z 轴的旋转 Panda3D是一个3D引擎:一个用于3D渲染和游戏开发…