什么是 HTTPS?它是如何解决安全性问题的?

什么是 HTTPS?

在这里插入图片描述

HTTPS(HyperText Transfer Protocol Secure)是一种安全的通信协议,用于在计算机网络上安全地传输超文本(如网页、图像、视频等)和其他数据。它是 HTTP 协议的安全版本,通过使用加密技术来保护通信的安全性和隐私性。

HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

HTTPS 解决了 HTTP 哪些问题?

HTTP 由于是明文传输,所以安全上存在以下三个风险:

  1. 可以通过抓包获取用户的私密信息
  2. 伪造服务器发送信息,骗取钱财
  3. 可以对报文进行篡改

在这里插入图片描述

HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:

  • 信息加密:交互信息无法被窃取。
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示。
  • 身份证书:证明服务器的可靠性。

HTTPS 是如何解决上面的三个风险的?

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

1. 对称加密和非对称加密

在这里插入图片描述

在正式开始讲解加密的方式之前,这里对「对称加密」和「非对称加密」做一些补充:

对称加密,双方持有相同的密钥,加密和解密都是使用这个密钥

非对称加密,服务器持有私钥,而向客户端去分发公钥,这两个密钥可以双向加解密的,比如可以用公钥加密内容,然后用私钥解密,也可以用私钥加密内容,公钥解密内容。

非对称加密算法常常用于**「私钥加密,公钥解密」的方式**来验证 消息发送者 的方式,比如常见的数字签名算法,采用的就是这种方式,大致流程是这样的:

  1. 发送方使用自己的私钥对消息的摘要进行加密,生成数字签名
  2. 发送方将原始消息和数字签名一起发送给接收方,
  3. 接收方使用发送方的公钥对数字签名进行解密,得到消息的摘要或哈希值。
  4. 接收方使用相同的哈希函数对收到的消息进行摘要处理,生成一个新的消息摘要。
  5. 接收方将生成的本地摘要与解密得到的摘要进行比较,以验证消息的完整性和真实性。

2. 混合加密

HTTPS 首先解决的是交互信息被窃取的问题,即本次会话中发送的所有消息 只有 双方能够解读。

HTTPS 采用的是 对称加密 + 非对称加密 的混合方法来加密双方的通信。

为什么要采用混合加密的方法呢?无论使用哪种方法,双方都要去 互通 密钥,既然有这个互通的环节,那这个消息就有可能被拦截,带来了伪造消息等风险。

所以所以要保证 正式对话 的时候使用的密钥是加密传递的。

  1. 当客户端向服务器发送信息的时候,服务器会发送一个可以证明自己身份的 数字证书,客户端可以从合法的数字证书中拿到 公钥,用户接收到数字证书之后,就会先去验证证书的有效性。
  2. 验证成功后,客户端就可以信任服务器的身份;随后,客户端生成一个随机的会话密钥,并使用服务器发送的公钥对会话密钥进行加密。
  3. 客户端发送这个会话密钥给服务器,服务器收到客户端发送的加密后的会话密钥后,使用私钥解密会话密钥。
  4. 客户端和服务器使用已经建立的会话密钥来加密和解密传输的数据,建立安全的通信通道。
  5. 在建立了安全通信通道后,后续的通信都将使用会话密钥进行加密和解密,保证通信的安全性和隐私性。

如果对公钥理解不深的话,很可能会有这样的疑问:如果公钥被拦截,那我不就可以假装这个用户给服务器发信息了吗?

实际上,公钥只是建立安全链接的方式,并不代表用户的信息,客户端的身份验证通常是在建立安全连接之后的一个步骤,通过额外的验证机制来完成。这些机制可能包括使用用户名和密码进行身份验证、使用客户端证书进行身份验证等。

也就是拿到了公钥其实就是拿到给服务器建立连接的机会,意义并不大。

3. 数字证书

在这里插入图片描述

实现客户端和服务器之间通信只有双方能解密,但有没有可能这个服务器本身就是伪造的呢?

我给一个假的服务器唰唰唰把我的个人信息都发过去了,造成的危害就极大了。

其实要解决这个问题也很简单,就是服务器要有证明自己身份的证书,这个证书证明了它是一个合法合规的服务器,如果使用这种服务器做一些违法的事情,根据注册信息来溯源也会非常简单;客户端可以根据这个证书来验证服务器的可靠性,拿到数字证书,验证完之后,客户端就知道这个服务器靠谱,可以发送信息了。

每个证书背后都要有一个权威的机构,数字证书也不例外,在计算机里,这个权威的机构就是 CA (数字证书认证机构),注册 CA 证书需要如下的信息:

  1. 证书持有者的身份信息:包括姓名、组织名称(如果是组织)、电子邮件地址等。这些信息将包含在数字证书的主体字段中。
  2. 证书的密钥对:包括公钥和私钥。公钥将包含在数字证书中,而私钥将被持有者用于加密和解密通信。
  3. 证书使用的目的:例如身份验证、数据加密等。
  4. 证书颁发机构(CA)的选择:证书可以由公共 CA(如 Let’s Encrypt、DigiCert 等)或私有 CA(组织内部的 CA)签发。
  5. 证书有效期:指定证书的开始日期和到期日期。证书在到期日期之后将不再被认为是有效的。
  6. 其他可选信息:根据实际需求,可能需要提供其他信息,例如组织的注册号码、地址、电话号码等。

那还有个问题,数字证书能否被伪造呢?只要拿到上面的部分信息就可以伪造了,那来看看哪些情况我们可以伪造证书(笑):

  1. 私钥泄露:如果证书持有者的私钥被泄露,攻击者可以使用该私钥签发伪造的数字证书。
  2. 证书颁发机构(CA)被攻击:如果攻击者能够入侵或操纵证书颁发机构(CA),他们可以签发伪造的数字证书。这种攻击可能包括对 CA 基础设施的入侵、社会工程攻击或其他形式的欺诈。
  3. 中间人攻击:攻击者可以在客户端和服务器之间插入自己的数字证书,从而模拟客户端与服务器之间的通信。这种攻击称为中间人攻击,通常用于窃听或篡改通信。

好像没有哪个是好实现的,而且还不一定有效,所以数字证书可以极大的保证通信的安全性。
4. 数字证书的签发和验证
在这里插入图片描述

证书签发流程:

  1. 证书申请:证书的申请者(通常是服务器管理员或个人)向证书颁发机构(CA)提交证书申请。申请通常包括证书持有者的身份信息、公钥等。
  2. 身份验证:CA 对证书申请者进行身份验证,以确保申请者的身份信息是真实的和可信的。身份验证通常包括验证申请者的身份证明文件、组织信息等。
  3. 生成密钥对:如果身份验证通过,CA 会生成证书持有者的密钥对,包括公钥和私钥。私钥将由证书持有者保密,而公钥将包含在证书中。
  4. 生成证书请求(CSR):证书持有者生成一个包含公钥和身份信息的证书请求(Certificate Signing Request,CSR),并将其发送给 CA。
  5. 证书签发:CA 收到 CSR 后,会对其进行验证,确认证书持有者的身份和公钥信息。如果一切正常,CA 将使用自己的私钥对证书请求进行签名,生成数字证书。
  6. 数字证书颁发:CA 将签发的数字证书发送回给证书持有者,数字证书包含了证书持有者的公钥、身份信息、证书有效期等。

数字证书的有效期结束后,需要再次申请并获取新的数字证书,以保持通信的安全性和有效性。

证书验证流程:

  1. 接收数字证书:验证者(如客户端)从通信对方(如服务器)处接收到数字证书。
  2. 验证证书链:验证者首先检查数字证书是否由受信任的 CA 签发。如果证书是由受信任的 CA 签发的,则证书被认为是可信的。否则,验证者会继续验证证书链,直到找到根证书为止。
  3. 验证证书的有效期:验证者检查数字证书的有效期,确保当前日期在证书的有效期内。
  4. 验证证书的吊销状态:验证者检查证书是否被吊销。这可以通过证书吊销列表(CRL)或在线证书状态协议(OCSP)来实现。
  5. 验证数字签名:验证者使用颁发 CA 的公钥来验证数字证书的数字签名。如果签名有效,则可以确信证书内容没有被篡改。
  6. 可选的附加验证:根据实际需要,验证者可能会进行其他验证,例如验证证书中的主体信息是否与通信方匹配,或者额外的验证证书中包含的其他信息。

签发证书的时候,CA 使用签名加密的其实是通过证书信息生成的哈希值,作为一个签名使用,而不是加密整个证书,用户通过公钥对签名解密,再去进行验证就可以保证 证书没有被篡改过

然后用户对证书的验证其实是一个信任链的过程,即 根证书 => 中间证书 => 实际的证书,证书的签发通常不是由根证书签发的,而是借助中间的证书,客户端在验证的时候只需要查询中间证书是否信任本次发送的证书即可。

在这里插入图片描述

当用户收到一个证书的时候,先去检测它的上层的证书是哪个,直到请求到根证书,而用户会持有一个根证书清单,请求到根证书后回去验证证书是否在这个清单上。

然后再去检测根证书是否信任下层的证书,逐次检查直到检查到服务器发送来的证书,这样就能验证证书的有效性了。

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

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

相关文章

Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式

Java大数据开发和安全开发 (一)Java的变量和方法1.1 成员变量1.2 成员方法1.3 static关键字1.3.1 static修饰成员变量1.3.1 static修饰成员变量的应用场景1.3.1 static修饰成员方法1.3.1 static修饰成员方法的应用场景1.3.1 static的注意事项1.3.1 static的应用知识…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-中

文章目录 一、DSL查询文档1.1 简单查询1.2 复合查询 二、搜索结果处理三、RestClient演示 查询与结果分析四、案例4.1 问题解析4.2 代码4.2.1 实体bean4.2.2 控制层4.2.3 业务service4.2.4 启动类 一、DSL查询文档 1.1 简单查询 # 1. DSL查询 # 1.1 查询所有GET /hotel/_searc…

JavaScript 进阶(一)

一、作用域 作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问。 作用域分为: 局部作用域 、全局作用域。 1.1局部作用域 局部作用域分为函数作用域和块作用域。 1. 函数作用域: 在函数…

分布式系统常见负载均衡实现模式

分布式系统常见负载均衡实现模式 1. 4层负载均衡1.1. 负载均衡的常见需求1.2. 负载均衡的实现模式1.2.1 DR模式1.2.2 TUN模式1.2.3 NAT模式1.2.4 FULLNAT模式1.2.5 4种模式的差异 1.3. 负载均衡的均衡算法1.3.1 静态负载均衡1.3.2 轮询法1.3.3 加权循环法1.3.4 IP 哈希法1.3.5 …

Vue前端开发记录(一)

本篇文章中的图片均为深色背景,请于深色模式下观看 说明:本篇文章的内容为vue前端的开发记录,作者在这方面的底蕴有限,所以仅作为参考 文章目录 一、安装配置nodejs,vue二、vue项目目录结构三、前期注意事项0、组件1、数不清的报…

首个ChatGPT机器人- Figure 01;李开复旗下零一万物推出Yi系列AI大模型API

🦉 AI新闻 🚀 首个ChatGPT机器人- Figure 01 摘要:Figure 01是一个由初创公司Figure联合OpenAI开发的人形机器人。它展示了与人类和环境互动的能力,可以说话、看东西,并且可以执行各种任务,如递食物、捡垃…

QT中dumpcpp以及dumpdoc使用

qt中调用COM的方式方法有四种,参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev): 在安装好了的qt电脑上,通过powershell窗口来实现,powershell比cmd要…

算法的基本概念和复杂度

目录 一. 算法的基本概念1.1 什么是算法1.2 算法的五个特性1.3 怎么才算好的算法 二. 算法的时间复杂度三. 算法的空间复杂度 \quad 一. 算法的基本概念 \quad \quad 1.1 什么是算法 算法可以用自然语言来描述, 也可以用伪代码和代码来描述 \quad 1.2 算法的五个特性 有穷性, 一…

ASP.NET-Server.HtmlEncode

目录 背景: 1.转义特殊字符: 2.防止跨站脚本攻击(XSS): 3.确保输出安全性: 4.保留原始文本形式: 5.与用户输入交互安全: 实例说明: 不用Server.HtmlEncode 效果展示: 用Server.HtmlEnc…

SpringMVC重点记录

目录 1.学习重点2.回顾MVC3.回顾servlet4.初始SpringMVC4.1.为什么要学SpringMVC?4.2.SpringMVC的中重点DispatcherServlet4.3.SpringMVC项目的搭建4.4.MVC框架要做哪些事情?4.5.可能会遇到的问题 5.SpringMVC的执行原理6.使用注解开发SpringMVC7.Controller控制总结8.RestF…

VSCode ARM CortexM 开发

VSCode ARM CortexM 开发: http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_开发/ 文章目录 VSCode ARM CortexM 开发: <http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_%E5%BC%80%E5%…

鸿蒙实战开发:【分布式软总线组件】

简介 现实中多设备间通信方式多种多样(WIFI、蓝牙等)&#xff0c;不同的通信方式使用差异大&#xff0c;导致通信问题多&#xff1b;同时还面临设备间通信链路的融合共享和冲突无法处理等挑战。分布式软总线实现近场设备间统一的分布式通信管理能力&#xff0c;提供不区分链路…

音频占用磁盘空间太多 需要把mp3音频转aac音频缩小占用空间 应该怎么操作?

一&#xff1a;什么是aac格式&#xff1f; aac是一种音频压缩格式&#xff0c;它是MPEG-2标准下的一种音频压缩方式&#xff0c;也可以作为HE-AAC&#xff0c;AAC或AAC-LC格式使用&#xff0c;是音频压缩领域中的一种重要格式。与MP3的比较&#xff0c;aac在保证音质的同时可以…

K8S CNI

OCI概念 OCI&#xff0c;Open Container Initiative&#xff0c;开放容器标准&#xff0c;是一个轻量级&#xff0c;开放的治理结构&#xff08;项目&#xff09;&#xff0c;在 Linux 基金会的支持下成立&#xff0c;致力于围绕容器格式和运行时创建开放的行业标准。 OCI 项目…

stm32-定时器输入捕获

目录 一、输入捕获简介 二、输入捕获框图 1.定时器总框图 2.输入捕获框图 3.主从触发模式 三、固件库实现 1.定时器测量PWM频率 2.PWMI模式 一、输入捕获简介 二、输入捕获框图 1.定时器总框图 上图可知&#xff0c;四个输入捕获和输出比较共用4个CCR寄存器&#x…

Android SystemServer进程解析

SystemServer进程在android系统中占了举足轻重的地位&#xff0c;系统的所有服务和SystemUI都是由它启动。 一、SystemServer进程主函数流程 1、主函数三部曲 //frameworks/base/services/java/com/android/server/SystemServer.java /** * The main entry point from zy…

人工智能程序使用的编程语言

用C语言可以写人工智能程序吗&#xff1f; 可以用C语言编写具有人工智能功能的程序&#xff0c;但是较为复杂。C语言是一种通用的编程语言&#xff0c;它在执行速度和资源控制方面表现出色&#xff0c;这使得它适合于需要高性能处理的人工智能应用&#xff0c;如游戏AI&#xf…

邮件安全|“AI钓鱼邮件”愈发泛滥,钓鱼邮件如何防“钓”?

毋庸置疑&#xff0c;人工智能是把双刃剑。 在AI蓬勃发展的过程中&#xff0c;潜在的风险正在悄然滋长。 近日&#xff0c;网络安全公司Enea发布的一份报告指出&#xff0c;随着以人工智能驱动的语音钓鱼&#xff08;vishing&#xff09;和短信钓鱼&#xff08;smishing&…

tomcat中把项目放在任意目录中的步骤

java web 项目由idea开发&#xff0c;路径如下图所示&#xff1a; 1.在tomcat安装目录conf\Catalina\localhost 里面&#xff0c;编写lesson1.xml文件内容如下&#xff1a; <Context path"/lesson1" docBase"C:\Users\信息技术系\Desktop\2024\学校工作\jav…

【一】【单片机】有关LED的实验

点亮一个LED灯 根据LED模块原理图&#xff0c;我们可以知道&#xff0c;通过控制P20、P21...P27这八个位置的高低电平&#xff0c;可以实现D1~D8八个LED灯的亮灭。VCC接的是高电平&#xff0c;如果P20接的是低电平&#xff0c;那么D1就可以亮。如果P20接的是高电平&#xff0c;…