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

HTTPS(HyperText Transfer Protocol Secure)是一种安全的通信协议,用于在计算机网络上安全地传输超文本(如网页、图像、视频等)和其他数据。它是 HTTP 协议的安全版本,通过使用加密技术来保护通信的安全性和隐私性。
HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
HTTPS 解决了 HTTP 哪些问题?
HTTP 由于是明文传输,所以安全上存在以下三个风险:
- 可以通过抓包获取用户的私密信息
- 伪造服务器发送信息,骗取钱财
- 可以对报文进行篡改

HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:
- 信息加密:交互信息无法被窃取。
- 校验机制:无法篡改通信内容,篡改了就不能正常显示。
- 身份证书:证明服务器的可靠性。
HTTPS 是如何解决上面的三个风险的?
- 混合加密的方式实现信息的机密性,解决了窃听的风险。
- 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
- 将服务器公钥放入到数字证书中,解决了冒充的风险。
1. 对称加密和非对称加密

在正式开始讲解加密的方式之前,这里对「对称加密」和「非对称加密」做一些补充:
对称加密,双方持有相同的密钥,加密和解密都是使用这个密钥
非对称加密,服务器持有私钥,而向客户端去分发公钥,这两个密钥可以双向加解密的,比如可以用公钥加密内容,然后用私钥解密,也可以用私钥加密内容,公钥解密内容。
非对称加密算法常常用于**「私钥加密,公钥解密」的方式**来验证 消息发送者 的方式,比如常见的数字签名算法,采用的就是这种方式,大致流程是这样的:
- 发送方使用自己的私钥对消息的摘要进行加密,生成数字签名
- 发送方将原始消息和数字签名一起发送给接收方,
- 接收方使用发送方的公钥对数字签名进行解密,得到消息的摘要或哈希值。
- 接收方使用相同的哈希函数对收到的消息进行摘要处理,生成一个新的消息摘要。
- 接收方将生成的本地摘要与解密得到的摘要进行比较,以验证消息的完整性和真实性。
2. 混合加密
HTTPS 首先解决的是交互信息被窃取的问题,即本次会话中发送的所有消息 只有 双方能够解读。
HTTPS 采用的是 对称加密 + 非对称加密 的混合方法来加密双方的通信。
为什么要采用混合加密的方法呢?无论使用哪种方法,双方都要去 互通 密钥,既然有这个互通的环节,那这个消息就有可能被拦截,带来了伪造消息等风险。
所以所以要保证 正式对话 的时候使用的密钥是加密传递的。
- 当客户端向服务器发送信息的时候,服务器会发送一个可以证明自己身份的 数字证书,客户端可以从合法的数字证书中拿到 公钥,用户接收到数字证书之后,就会先去验证证书的有效性。
- 验证成功后,客户端就可以信任服务器的身份;随后,客户端生成一个随机的会话密钥,并使用服务器发送的公钥对会话密钥进行加密。
- 客户端发送这个会话密钥给服务器,服务器收到客户端发送的加密后的会话密钥后,使用私钥解密会话密钥。
- 客户端和服务器使用已经建立的会话密钥来加密和解密传输的数据,建立安全的通信通道。
- 在建立了安全通信通道后,后续的通信都将使用会话密钥进行加密和解密,保证通信的安全性和隐私性。
如果对公钥理解不深的话,很可能会有这样的疑问:如果公钥被拦截,那我不就可以假装这个用户给服务器发信息了吗?
实际上,公钥只是建立安全链接的方式,并不代表用户的信息,客户端的身份验证通常是在建立安全连接之后的一个步骤,通过额外的验证机制来完成。这些机制可能包括使用用户名和密码进行身份验证、使用客户端证书进行身份验证等。
也就是拿到了公钥其实就是拿到给服务器建立连接的机会,意义并不大。
3. 数字证书

实现客户端和服务器之间通信只有双方能解密,但有没有可能这个服务器本身就是伪造的呢?
我给一个假的服务器唰唰唰把我的个人信息都发过去了,造成的危害就极大了。
其实要解决这个问题也很简单,就是服务器要有证明自己身份的证书,这个证书证明了它是一个合法合规的服务器,如果使用这种服务器做一些违法的事情,根据注册信息来溯源也会非常简单;客户端可以根据这个证书来验证服务器的可靠性,拿到数字证书,验证完之后,客户端就知道这个服务器靠谱,可以发送信息了。
每个证书背后都要有一个权威的机构,数字证书也不例外,在计算机里,这个权威的机构就是 CA (数字证书认证机构),注册 CA 证书需要如下的信息:
- 证书持有者的身份信息:包括姓名、组织名称(如果是组织)、电子邮件地址等。这些信息将包含在数字证书的主体字段中。
- 证书的密钥对:包括公钥和私钥。公钥将包含在数字证书中,而私钥将被持有者用于加密和解密通信。
- 证书使用的目的:例如身份验证、数据加密等。
- 证书颁发机构(CA)的选择:证书可以由公共 CA(如 Let’s Encrypt、DigiCert 等)或私有 CA(组织内部的 CA)签发。
- 证书有效期:指定证书的开始日期和到期日期。证书在到期日期之后将不再被认为是有效的。
- 其他可选信息:根据实际需求,可能需要提供其他信息,例如组织的注册号码、地址、电话号码等。
那还有个问题,数字证书能否被伪造呢?只要拿到上面的部分信息就可以伪造了,那来看看哪些情况我们可以伪造证书(笑):
- 私钥泄露:如果证书持有者的私钥被泄露,攻击者可以使用该私钥签发伪造的数字证书。
- 证书颁发机构(CA)被攻击:如果攻击者能够入侵或操纵证书颁发机构(CA),他们可以签发伪造的数字证书。这种攻击可能包括对 CA 基础设施的入侵、社会工程攻击或其他形式的欺诈。
- 中间人攻击:攻击者可以在客户端和服务器之间插入自己的数字证书,从而模拟客户端与服务器之间的通信。这种攻击称为中间人攻击,通常用于窃听或篡改通信。
好像没有哪个是好实现的,而且还不一定有效,所以数字证书可以极大的保证通信的安全性。
4. 数字证书的签发和验证

证书签发流程:
- 证书申请:证书的申请者(通常是服务器管理员或个人)向证书颁发机构(CA)提交证书申请。申请通常包括证书持有者的身份信息、公钥等。
- 身份验证:CA 对证书申请者进行身份验证,以确保申请者的身份信息是真实的和可信的。身份验证通常包括验证申请者的身份证明文件、组织信息等。
- 生成密钥对:如果身份验证通过,CA 会生成证书持有者的密钥对,包括公钥和私钥。私钥将由证书持有者保密,而公钥将包含在证书中。
- 生成证书请求(CSR):证书持有者生成一个包含公钥和身份信息的证书请求(Certificate Signing Request,CSR),并将其发送给 CA。
- 证书签发:CA 收到 CSR 后,会对其进行验证,确认证书持有者的身份和公钥信息。如果一切正常,CA 将使用自己的私钥对证书请求进行签名,生成数字证书。
- 数字证书颁发:CA 将签发的数字证书发送回给证书持有者,数字证书包含了证书持有者的公钥、身份信息、证书有效期等。
数字证书的有效期结束后,需要再次申请并获取新的数字证书,以保持通信的安全性和有效性。
证书验证流程:
- 接收数字证书:验证者(如客户端)从通信对方(如服务器)处接收到数字证书。
- 验证证书链:验证者首先检查数字证书是否由受信任的 CA 签发。如果证书是由受信任的 CA 签发的,则证书被认为是可信的。否则,验证者会继续验证证书链,直到找到根证书为止。
- 验证证书的有效期:验证者检查数字证书的有效期,确保当前日期在证书的有效期内。
- 验证证书的吊销状态:验证者检查证书是否被吊销。这可以通过证书吊销列表(CRL)或在线证书状态协议(OCSP)来实现。
- 验证数字签名:验证者使用颁发 CA 的公钥来验证数字证书的数字签名。如果签名有效,则可以确信证书内容没有被篡改。
- 可选的附加验证:根据实际需要,验证者可能会进行其他验证,例如验证证书中的主体信息是否与通信方匹配,或者额外的验证证书中包含的其他信息。
签发证书的时候,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中的控制器,处理完数据后把结果相应给客户端 正向索引&#…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
