浅谈 HTTPS
文章目录
- HTTPS 简介
- HTTPS 特点
- HTTPS 缺点
- 与 HTTP 的区别
- HTTPS 工作流程
- 1. 服务端生成密钥对
- 2. 服务端申请数字证书
- 3. 服务端发送数字证书
- 4. 客户端验证数字证书
- 5. 客户端解析证书内容
- 6. 客户端传送加密信息
- 7. 服务端解密信息
- 8. 双方协商生成会话密钥并交换
- 9. 使用会话密钥进行通信
- 总结
浅谈 HTTP
HTTPS 简介
HTTPS (Hypertext Transfer Protocol Secure) 是一种安全的通信协议,以安全为目标的HTTP通道,简单讲是HTTP的安全版。
HTTPS 通过在 HTTP 协议的基础上添加 SSL/TLS 来提供加密通信和身份验证,HTTPS的安全基础是 SSL/TLS。
这意味着,当使用 HTTPS 访问一个网站时,与该网站之间的所有通信都是加密的,从而保护数据免受中间人攻击和其他形式的网络攻击。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
-
SSL:
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。 -
TLS:
它是 SSL (Secure Sockets Layer) 的继任者,因为 SSL 在过去的几个版本中存在已知的安全漏洞,所以 SSL 3.0 之后的版本被重新命名为 TLS,并且后续的改进和发展都在 TLS 的名下进行。
HTTPS 的作用:
- 建立一个信息安全通道,来保证数据传输的安全;
- 确认网站的真实性。
HTTPS 特点
-
安全性:
HTTPS在HTTP协议的基础上加入了安全层(SSL/TLS),对数据进行加密传输
保护了数据在传输过程中的安全,防止被第三方截获和窃取(Cookie都会通过加密的方式传输)
HTTPS连接在数据传输过程中始终保持加密状态,即使连接被截断,也不会影响数据的加密状态。
-
可信性:
HTTPS需要使用CA(证书颁发机构)颁发的证书来进行加密和解密操作,来验证服务端的身份
客户端在与服务端建立连接时会验证证书的真实性和合法性,确保通信双方的身份可信(防止了中间人攻击)
使用HTTPS协议可以提升用户对网站的信任度
-
完整性:
HTTPS协议使用MAC(消息认证码)来确保数据的完整性。
HTTPS 缺点
-
性能开销
HTTPS协议需要在服务器和客户端之间建立加密连接,相对于HTTP协议需要进行更多的握手和加密解密操作,这可能会增加网络延迟和服务器负载。
-
实现难度
HTTPS协议涉及到加密算法和证书管理等复杂技术,实现难度较大,需要专业的技术支持和维护。
-
兼容性问题
虽然大多数现代浏览器都支持HTTPS协议,但仍有一些较旧的浏览器或设备可能无法很好地支持HTTPS协议,导致页面无法正常加载或出现安全警告。
-
成本问题
使用HTTPS协议需要购买SSL证书等额外的成本,对于一些小型网站或个人网站来说可能是一个负担。此外,连接服务器会占用较高的资源,增加带宽和服务器投入成本。
与 HTTP 的区别
HTTP 与 HTTPS
特性/区别 | HTTP | HTTPS |
---|---|---|
安全性 | 明文传输,数据可见,不安全 | 使用SSL/TLS加密,数据安全 |
连接方式 | 无加密连接 | 加密连接,使用SSL/TLS协议 |
端口号 | 默认80 | 默认443 |
证书管理 | 不需要证书 | 需要CA颁发的SSL证书 |
连接状态 | 传输过程中可能被窃取或篡改 | 传输过程中始终保持加密状态 |
资源消耗 | 较少,无需加密解密 | 较多,需要进行加密解密操作 |
费用 | 无额外费用 | 需要购买和配置SSL证书的费用 |
兼容性 | 广泛兼容 | 可能与某些软件或设备存在兼容性问题 |
浏览器地址展示 | 无安全锁标志 | 有绿色安全锁标志 |
搜索引擎优化(SEO) | 可能排名较低(取决于搜索引擎) | 可能排名较高(取决于搜索引擎) |
HTTPS 工作流程
1. 服务端生成密钥对
在HTTPS通信中,服务端首先生成一对密钥:私钥和公钥
-
私钥:
私钥是密钥对所有者(服务端)持有的,必须严格保密,不可公布给任何人。
私钥用于解密由公钥加密的数据,以及用于对需要传输的文本的摘要进行加密,生成签名。
-
公钥:
公钥是密钥对持有者(服务端)公布给他人的,用于给数据加密。
用公钥加密的数据只能使用对应的私钥进行解密。
在签名验证过程中,接收方会使用公钥对签名进行解密,获取文本的摘要,然后与自己计算得到的摘要进行对比,以验证数据的完整性和发送者的身份。
私钥可以看成钥匙,只能自己拿着,可以解开对应的锁头
公钥可以看成锁头,给别人加密重要数据的,只有对应的钥匙才能打开
.
2. 服务端申请数字证书
采用HTTPS协议的服务端必须要有一套数字证书,可以向证书颁发机构CA提出购买申请:
常见的证书颁发机构包括Symantec、GeoTrust、Thawte等。
-
提交申请:
准备申请材料 => 线上购买 => 缴纳费用
服务端向CA提交数字证书的申请(申请包括:该实体的公钥以及相关的身份信息)
-
验证申请:
证书颁发机构将对服务端的申请进行审核,验证这个申请的真实性(如:确认申请者是否真的拥有所提交的公钥)
可能还需要服务端配合完成实名认证、域名验证等环节。
-
颁发证书:
验证通过后证书颁发机构将为服务端颁发CA数字证书
证书通常以电子文件的形式提供,服务端需要根据颁发机构的指引下载、安装和使用证书。
数字证书包含:
-
申请者的公钥:
用于在HTTPS通信中加密数据,确保数据只能被具有相应私钥的服务端解密
-
数字签名:
证书颁发机构会使用自己的私钥对证书的内容(包括申请者的公钥和一些其他信息)进行加密,生成一个数字签名(哈希值)
这个签名是证书颁发机构对证书内容的认可,确保证书没有被篡改
-
其他信息:
申请者的身份信息(如域名)
证书信息:包括证书的有效期、证书持有者的名称(域名)、证书链等信息
HTTPS的数字证书并不直接包含私钥,但它确实与私钥紧密相关。
.
3. 服务端发送数字证书
服务端收到数字证书后,会在HTTPS通信的TLS/SSL握手过程中主动向客户端发送数字证书
.
4. 客户端验证数字证书
-
获取证书链:
客户端收到数字证书后就会从中获取证书链
证书链:数字证书中包含整个证书链,证书链是由一系列证书构成的链条,从服务端证书开始到中间证书,直到根证书结束。
. -
解析证书链:
客户端解析证书链中的每个证书,获取证书的各种属性(颁发者、有效期、域名等)
. -
检查证书域名:
在解析证书链后,客户端会检查证书中的域名是否与请求的域名一致
这是为了防止“中间人攻击(MITM)”,即攻击者拦截并篡改通信内容,或者冒充服务端与客户端进行通信,确保客户端与预期的服务端进行通信。
. -
验证证书的有效性:
在确认域名匹配后,客户端会验证证书的有效性(是否已过期、被吊销)
- 检查证书是否在有效期内(即证书的开始时间和结束时间)
- 检查证书是否已被吊销(通过证书吊销列表CRL或在线证书状态协议OCSP)。
.
-
验证证书链:
接下来,客户端会验证证书链的完整性(使用公钥来验证证书的数字签名)
客户端会按照顺序验证证书链中的每个证书,从服务端证书开始,使用颁发者的公钥来验证证书的数字签名,并重复此过程,直到到达受信任的根证书。
如果任何一个证书的签名验证失败,那么整个证书链将被视为无效,客户端将不会信任服务端证书,从而阻止与服务端的安全通信。
以确保证书是由受信任的证书颁发机构签发的,并且整个信任链是完整和未被篡改的。
. -
验证根证书:
最后,客户端会验证服务端证书的合法性(客户端在预置的信任机构列表中查找根证书,找到即合法)
- 根证书在列表中:那么客户端就会信任这个根证书,并认为整个证书链是有效的。
- 根证书不在列表中:那么证书链将被视为无效。
.
5. 客户端解析证书内容
数字证书被验证为有效后,客户端开始解析数字证书中的内容
数字证书中包含了许多关于服务端的信息:如服务端的公钥、证书的有效期、颁发者信息等。
.
6. 客户端传送加密信息
当客户端解析数字证书后,就会向服务端传送加密信息
这个过程通常包括以下几个步骤:
-
生成会话密钥:
客户端会生成一个随机的会话密钥(通常是一个对称密钥)
这个密钥将用于后续的加密和解密操作
-
加密会话密钥:
客户端使用服务端证书中的公钥对生成的会话密钥进行加密
这就像使用一个锁(公钥)将密钥(会话密钥)锁住,只有持有相应钥匙(私钥)的人才能打开这个锁
-
传送加密信息:
客户端将加密后的会话密钥(以及可能的其他加密参数或信息)通过HTTPS连接发送给服务端
这个过程中,由于会话密钥已经被服务端的公钥加密,因此即使数据在传输过程中被截获,攻击者也无法直接获取到会话密钥的内容
.
7. 服务端解密信息
当服务端接收到客户端发送的加密信息后,服务端使用自己的私钥来解密会话密钥
这就像服务端使用自己的钥匙打开了客户端锁上的锁,从而获取到了会话密钥。
这样,双方就都拥有了相同的会话密钥,而第三方无法知道这个密钥。
.
8. 双方协商生成会话密钥并交换
上面的客户端传送加密信息 和 服务端解密信息就是 双方协商生成会话密钥并交换 的过程
.
9. 使用会话密钥进行通信
一旦会话密钥被成功协商和交换,服务端和客户端双方就可以使用这个会话密钥来对后续的HTTP请求和响应进行加密和解密了
具体来说,客户端会使用会话密钥来加密其发送给服务端的HTTP请求,而服务端则使用相同的会话密钥来解密这些请求。
同样地,服务端也会使用会话密钥来加密其发送给客户端的HTTP响应,而客户端则使用相同的会话密钥来解密这些响应。
这种加密方式通常被称为对称加密,因为它使用同一个密钥(会话密钥)来进行加密和解密操作。确保了通信过程中数据的安全性和机密性。因为只有拥有会话密钥的双方才能对消息进行正确的加密和解密,而第三方无法知道这个密钥,因此无法窃取或篡改通信内容。
总结
-
服务端首先生成一对密钥:私钥和公钥
-
服务端向证书颁发机构提交数字证书的申请(申请包括:该实体的公钥以及相关的身份信息)
-
证书颁发机构验证申请的真实性(如:确认申请者是否真的拥有所提交的公钥)
-
验证通过后证书颁发机构将为服务端颁发CA数字证书
-
服务端主动向客户端发送数字证书
-
客户端收到数字证书后就会从中获取证书链
-
客户端解析证书链中的每个证书,获取证书的各种属性(颁发者、有效期、域名等)
-
客户端检查证书中的域名是否与请求的域名一致
-
客户端验证证书的有效性(是否已过期、被吊销)
-
客户端验证证书链的完整性(使用公钥来验证证书的数字签名)
-
客户端验证服务器证书的合法性(在预置的信任机构列表中查找根证书,找到即合法)
-
客户端解析数字证书中的内容(得到服务器的公钥、证书的有效期等)
-
客户端会生成一个随机的会话密钥
-
客户端使用服务器证书中的公钥对生成的会话密钥进行加密
-
客户端将加密后的会话密钥发送给服务器
-
服务端使用自己的私钥来解密会话密钥
-
服务端和客户端双方协商生产会话密钥并交换
-
服务端和客户端双方就可以使用这个会话密钥来对后续的HTTP请求和响应进行加密和解密了
相关文章:

浅谈 HTTPS
文章目录 HTTPS 简介HTTPS 特点HTTPS 缺点与 HTTP 的区别HTTPS 工作流程1. 服务端生成密钥对2. 服务端申请数字证书3. 服务端发送数字证书4. 客户端验证数字证书5. 客户端解析证书内容6. 客户端传送加密信息7. 服务端解密信息8. 双方协商生成会话密钥并交换9. 使用会话密钥进行…...

js手动实现unshift
js 手动实现数组的unshift unshift是什么? unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。 注意: 该方法将改变数组的数目。 语法: array.unshift(item1,item2, ..., itemX)代码实现 首先,在…...

Failed to get DISPLAY: Error: All configured authentication methods failed 解决方法
Vscode一连接远程服务器就报错: 这个时候我们是无法使用Xming显示图像的。 尝试后发现,Windows电脑能够ping通服务器ip,但是服务器ping不通Windows电脑: 在网上查攻略,设置Windows电脑ip地址白名单,但…...

随便聊一下 显控科技 控制屏 通过 RS485 接口 上位机 通讯 说明
系统搭建: 1、自己研发的一个小系统(采集信号,将采集的信号数字化)通过COM口,连接显控屏 COM3 口采用 485 协议送到显控屏(显控科技)的显示屏展示出来)。 2、显控屏 将 展示的数据…...

C++学习笔记(多线程)
Multithreading 1、线程的基本操作1.1、创建线程1.2、等待线程和分离线程1.3、获取线程id 2、互斥锁3、条件变量4、例程 1、线程的基本操作 从C11开始推出关于多线程的库和函数,相比于Linux所配套的资源,C11提供的函数更加容易理解和操作,对…...

解决Redis的键值前出现类似\xAC\xED\x00\x05t\x00*这样的字符序列
文章目录 1.问题2.解决方法3.StringRedisTemplate和RedisTemplate的区别 1.问题 在使用RedisTemplate对Redis进行操作时,发现Reids键值对前有\xAC\xED\x00\x05t\x00*这样的字符序列 如图所示: 虽说不影响使用,但是听影响观感的 2.解决方法 查找了很多方法,可以指定RedisTem…...

分享 Kamailio 5.7.x 预处理一例
来自工单,很不错 不翻译了,认真看的话都能看懂 #!define IPADDR 127.0.0.1 #!defexp SIPURI "sip:" IPADDR ":5060" #!defexp QSIPURI "sip: IPADDR :5060" #!defexp V16 1<<4 Another possibility is using…...

学QT的第三天~
ikun登录界面完善 #include "mywidget.h" void MyWidget::bth1() { if(edit3 ->text()"520cxk"&&edit4 ->text()"1314520") { //1.实例化一个QmessageBox类的对象 QMessageBox box(QMessageBox::Information, //图标 "恭喜…...

数据结构---时间复杂度+空间复杂度
算法(algorithm)简单说就是解决问题的方法。方法有好坏,同样算法也是,有效率高的算法,也有效率低的算法。衡量算法的好坏一般从时间和空间两个维度衡量,也就是本文要介绍的时间复杂度和空间复杂度。有些时候,时间与空间…...

Verilog 触发器状态机语言描述
触发器状态机语言描述 触发器状态机语言用于描述映射到 ILA 调试核的高级触发器逻辑的复杂触发条件。触发器状态机具有下列特性 : • 最多 16 种状态。 • 用于复杂状态转换的单向、双向和三向条件分支。 • 4 个内置 16 位计数器 , 用于对事件…...

等保保护测评试题中
二、多选题 1、防火墙提供的接入模式中包括(ABCD) A.网关模式 B.透明模式 C.混合模式 D.旁路接入模式 2、不同设VLAN之间要进行通信,可以通过 .(AB) A.交换机 B.路由器 C.网闸 D.入侵检测 E.入侵防御系统…...

SD-Turbo部署
stabilityai/sd-turbo 官网 2023 年 11 月 30 日 继推出 SDXL-Turbo 之后,我们又发布了SD-Turbo。 2023 年 11 月 28 日 我们正在发布 SDXL-Turbo,一种闪电般快速的文本到图像模型。除了模型之外,我们还发布了技术报告 用法࿱…...

【ZZULIOJ】1095: 时间间隔(函数专题)(Java)
目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。要求程序定义如下两个函数,并在main()中调用…...

Rust:文件 launch.json 有什么用?
launch.json 是 Visual Studio Code(VSCode)中的一个配置文件,主要用于配置调试器。当你在 VSCode 中进行代码调试时,launch.json 文件告诉调试器如何启动和配置你的程序。 具体来说,launch.json 文件包含了以下信息&…...

vue3实现文字垂直滚动
在Vue 3中实现文字的垂直滚动,你可以使用CSS动画或者JavaScript来控制滚动行为。以下是一个简单的Vue 3组件示例,该组件使用CSS的keyframes动画来实现文字的垂直滚动效果: <template> <div class"vertical-scroll-text"&…...

Android4.4真机移植过程笔记(三)
如果文章字体看得不是很清楚,大家可以下载pdf文档查看,文档已上传~oo~ 7、安装加密APK 需要修改文件如下: 相对Android4.2改动还是蛮大的,有些文件连路径都变了: //Android4.2 1、frameworks/native/libs…...

PostgreSQL备份恢复与复制
前言 随着国家战略层面对信息安全关注度越来越高,数据库是基础软件国产化自主可控的重要方面之一。PG是世界上最流行的开源关系型数据库之一,并且他是类BSD开源许可,开源协议非常友好,可以随意分发、闭源和开源,可以用…...

spring高级篇(八)
本篇对Spring MVC 的执行流程做一个简单总结 MVC执行流程总结 当浏览器发送一个请求,例如http://localhost:8080/hello,请求到达服务器后,一般会进行如下操作: 1、首先会经过DispatcherServlet,默认映射路径为 /&…...

UP互助 帮助UP起号做视频 支持B站和抖音
【软件名字】:UP互助 【软件版本】:1.0 【软件大小】:17.5MB 【软件平台】:安卓 【测试机型】:小米9 1.随便登个邮箱,添加自己平台的频道,然后就可以帮助别人,添加频道后在添加…...

*求问?:为何会超时(TLE)?
D - Grid and Magnet (atcoder.jp) 错误代码: //2024年5月5日14:53:43 #include <bits/stdc.h> #define move mmove //防止与头文件中重复 using namespace std; int h,w; string s[1000]; const int move[4][2]{{1,0},{-1,0},{0,1},{0,-1}}; bool used[100…...

cocosstudio工程文件(.ccs)维护问题
创建cocos工程.bat在多人合作的cocos项目中,大家公用一个ccs文件,存在的问题是如果大家都提交ccs文件比较容易出现冲突,解决冲突麻烦要耗费时间,不提交的话就拉不到其他人更新的csd文件。 方案一 解决冲突,更新提交c…...

Blender动画与云渲染:创造高质量作品的未来路径
Blender作为开源的3D图形软件,在多个领域广受欢迎。但随着项目复杂度提升,传统渲染方式受限。云渲染技术的兴起突破了这些限制,为创作者提供了更自由、高效的创作环境。 一、Blender动画项目的挑战 传统上,Blender动画渲染需要依…...

【MySQL】3.MySQL核心概念解析:数据完整性、事务处理、索引及聚簇索引与非聚簇索引
探索MySQL的内部机制,理解数据完整性、事务处理、索引策略以及聚簇索引与非聚簇索引的区别是至关重要的。这些概念构成了数据库设计和优化的基础,对于确保数据的准确性、提高查询效率、维护数据的一致性和实现复杂的数据库操作至关重要。本文将逐一剖析这…...

【netty系列-03】深入理解NIO的基本原理和底层实现(详解)
Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…...

大数据Scala教程从入门到精通第二篇:Scala入门
一:Scala入门 1:为什么学习Scala Spark新一代内存级大数据计算框架,是大数据的重要内容 Spark就是使用Scala编写的。因此为了更好的学习Spark,需要掌握Scala这门语言 Spark的兴起,带动Scala语言的发展! 2:Scala的发展…...

Spring Data JPA数据批量插入、批量更新真的用对了吗
Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 前言 在前两篇文章已经…...

数据结构-线性表-应用题-2.2-12
1)算法的基本设计思想:依次扫描数组的每一个元素,将第一个遇到的整数num保存到c中,count记为1,若遇到的下一个整数还是等于num,count,否则count--,当计数减到0时,将遇到的下一个整数保存到c中,计…...

目录页码右对齐快速解决
选择目录–段落–制表符,按图中设置即可...

分红76.39亿,分红率再创新高,成长活力无限的伊利带来丰厚回报
伊利47万股东,又等来了一个好消息。 4月29日,伊利股份发布2023年报,实现营业总收入1261.79亿元,归母净利润104.29亿元,双创历史新高,实现连续31年稳健增长。 在递交亮眼成绩单的同时,乳业巨头伊…...

关于行进线路。
https://map.tianditu.gov.cn/ 作者:Chockhugh 链接:https://www.zhihu.com/question/20545559/answer/494685117 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 以50km,几乎全是…...