浅谈 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…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...