当前位置: 首页 > news >正文

什么是 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 使用签名加密的其实是通过证书信息生成的哈希值,作为一个签名使用,而不是加密整个证书,用户通过公钥对签名解密,再去进行验证就可以保证 证书没有被篡改过

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

在这里插入图片描述

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

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

相关文章:

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

什么是 HTTPS? HTTPS(HyperText Transfer Protocol Secure)是一种安全的通信协议,用于在计算机网络上安全地传输超文本(如网页、图像、视频等)和其他数据。它是 HTTP 协议的安全版本,通过使用加…...

C++入门(下)

文章目录 1:引用1.1:引用概念1.2:引用的特性.1.2.1:引用在定义时必须初始化1.2.2:一个变量可以有多个引用1.2.3:引用一旦引用一个实体,再不能引用其他实体. 1.3:应用场景1.3.1:做参数1.3.2:做返回值1.3.2.1:传值返回1.3.2.2:传引用返回(错误示范)1.3.2.3:传引用返回(正确示范) …...

2024-03-20 作业

作业要求: 1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资。 2> 添加三条工人信息(可以完整信息,也可以非完整信息) 3> 修改某一个工人的薪资(确定的一个&#x…...

【机器学习】深入解析线性回归模型

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 【机器学习】深入解析线性回归模型 引入一 初步了解1.1 概念1.2 类比二 基本要素2.1 数据2.2 模型…...

新一代云原生数据库OLAP

2023 OLAP峰会(公开)PPT汇总(25份).zip 新一代云原生数据库的OLAP(联机分析处理)能力是其重要的特性之一,这种能力使得数据库能够支持复杂的数据分析查询,从而满足企业对大数据的深…...

JavaEE--小Demo

目录 下载包 配置 修改文件 pom.xml application.properties 创建文件 HelloApi.java GreetingController.java Greeting.java DemoApplication.java 运行包 运行命令 mvn package cd target dir java -jar demo-0.0.1-SNAPSHOT.jar 浏览器测试结果 下载包 …...

一代大神跌落神坛——Java炸了!

曾经它是只手遮天的一大计算机语言.......可现如今,腹背受敌、大势已去,一代神话跌落神坛! Java薪水20k降至15k难掩颓势,事业编3k升至3500尽显嫡道风范!嫡嫡道道、嫡嫡道道~ 没错,就是它!Java…...

面试算法-64-零钱兑换

题目 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的…...

Java复习06 Spring 代码概念

Java复习06 Spring 代码概念 1.基本代码 Component public class CommunityApplicationTests implements ApplicationContextAware {private ApplicationContext applicationContext;Overridepublic void setApplicationContext(ApplicationContext applicationContext) thr…...

【研究僧总结】回顾第1095个创作日

目录 前言一. 机缘二. 日常三. 展望 前言 感觉刚过1024不久,现在又来个1095创作日 一. 机缘 研究僧一直在找平台做笔记,方便之后的回顾总结,也让各位网友见证你我的成长,相互学习 止不住的写文止不住的成长,大家共同…...

QT(6.5) cmake构建C++编程,调用python

一、注意事项 explicit c中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色,构造器、类型转换操作符, c提供关键字explicit,阻止转换构造函数进行的隐式转换的发生&#…...

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的应用知识…...

通过 Socket 手动实现 HTTP 协议

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...

探索数据结构:双向链表的灵活优势

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty’s blog 1. 前言 前面我们学习了单链表,它解决了顺序表中插入删除需…...

记录一次服务器内存使用率过高达到90%告警问题排查。

目录 一、前言二、问题排查处理三、 结尾 👩🏽‍💻个人主页:阿木木AEcru 🔥 系列专栏:Docker容器化部署系列 💹每一次技术突破,都是对自我能力的挑战和超越。 一、前言 一大早就有一…...

基于react native的自定义轮播图

基于react native的自定义轮播图 效果示例图示例代码 效果示例图 示例代码 import React, {useEffect, useRef, useState} from react; import {Animated,PanResponder,StyleSheet,Text,View,Dimensions, } from react-native; import {pxToPd} from ../../common/js/device;c…...

Jetson入坑记实

关于虚拟环境python与系统自带python目录下dist-packages与site-packages dist-packages:系统自带的python site-packages:自己安装的python 详细:dist-packages与site-packages_dist-packages和site-packages-CSDN博客 rtsp获取视频流(没…...

算法系列--递归

一.如何理解递归 递归对于初学者来说是一个非常抽象的概念,笔者在第一次学习时也是迷迷糊糊的(二叉树遍历),递归的代码看起来非常的简洁,优美,但是如何想出来递归的思路或者为什么能用递归这是初学者很难分析出来的 笔者在学习的过程中通过刷题,也总结出自己的一些经验,总结来…...

【JS】替换文本为emjio表情

最终效果展示 T1 T2 T3 T4 需求 把评论你好帅啊啊啊[开心][开心],[开心] 替换为图片 思路 正则match提取[开心]到一个数组数组去重创建img标签img标签转文本. 。例:(el.outerHTML),将el元素转文本字符串replaceAll…...

Solr完结版

Solr是基于Apache Lucene构建的用于搜索和分析的开源解决方案。提供可拓展索引、搜索功能、高亮显示和文字解析功能。本质是一个java web项目,内嵌Jetty服务器,安装方便。 请求Solr中的控制器,处理完数据后把结果相应给客户端 正向索引&#…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘&#xf…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值&#xff0c;以达到平滑&#xff08;去噪&#xff09;、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算&#xff0c;…...