HTTPS 笔记整理

计算机网络整理:HTTP协议、HTTPS协议、Websocket协议 系列文章目录 一:http协议和https协议的区别 1、Https通信需要证书,而证书一般需要向认证机构(一般是ca)购买,因而需要一定费用 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。因此,与HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源; 3、http的连接很简单,是无状态的,https协议是由ssl+http协议构建的可进行加密串苏,身份验证的网络协议,比http协议安全。 4、http用的端口是80,https用的端口是4 阅读详情

主要摘抄自:SSL/TLS 协议运行机制的概述

1. 概述
1.1 基本概念
1.1.1 SSL (Secure Socket Layer,安全套接字层)

SSL 为 Netscape 所研发,用以保障在 Internet 上数据传输之安全,利用数据加密 (Encryption) 技术,可确保数据在网络上之传输过程中不会被截取,当前为3.0版本。

SSL 协议可分为两层: SSL 记录协议(SSL Record Protocol):它建立在可靠的传输协议(如 TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

1.1.2 TLS (Transport Layer Security,传输层安全协议)

用于两个应用程序之间提供保密性和数据完整性。

TLS 1.0 是 IETF(Internet Engineering Task Force,Internet 工程任务组)制定的一种新的协议,它建立在 SSL 3.0 协议规范之上,是 SSL 3.0 的后续版本,可以理解为 SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

1.2 作用

不使用 SSL/TLS 的 HTTP 通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS 协议是为了解决这三大风险而设计的,希望达到:

(1) 所有信息都是加密传播,第三方无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。

2. 运行过程
2.1 简述

客户端先向服务器索取公钥,通过该公钥将客户端生成的一个随机数来加密并传输到服务端(此时涉及到的是非对称加密)。

然后客户端、服务端双方基于前面说的那个随机数(实际上总共涉及到三个随机数,这里的这个是最关键的),以及约定好的算法,在两端各自生成 “对话密钥”(session key),注意,虽然是各自生成的,但是因为使用了同样的算法以及随机数,因此两端生成的 session key 是一致的。之后,就可以通过 session key 来将双方通信的数据进行加解密。(这里涉及到的是对称加密)。

这里总共涉及到了两类加密算法:
(1)非对称加密是为了安全的传输用于生成 session key 的随机数,防止被攻击者破解;
(2)而对称加密因为 session key 只有通信双方知道,因此基于对称加密可以减少加解密的时间,提高通信效率。

因此 SSL/TLS 协议的基本过程是这样的:

(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。

上面过程的前两步,又称为 “握手阶段”(handshake)。

2.2 握手阶段
2.2.1 客户端发出请求(ClientHello)

客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做 ClientHello 请求。

客户端主要向服务器提供以下信息:

(1) 支持的协议版本,比如 TLS 1.0 版。
(2) 一个客户端生成的随机数,稍后用于生成 “对话密钥”。
(3) 支持的加密方法,比如 RSA 公钥加密。
(4) 支持的压缩方法。

注意,这里涉及到了第一个随机数。

2.2.2 服务器回应(ServerHello)

服务器收到客户端请求后,向客户端发出回应,这叫做 ServerHello。服务器的回应包含以下内容:

(1) 确认使用的加密通信协议版本,比如 TLS 1.0 版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数,稍后用于生成 “对话密钥”。
(3) 确认使用的加密方法,比如 RSA 公钥加密。
(4) 服务器证书。

除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供 USB 密钥,里面就包含了一张客户端证书。

注意,这里涉及到了第二个随机数。

2.2.3 客户端回应

客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

(1) 一个随机数(pre-master key)。该随机数用服务器公钥加密,防止被窃听。
(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容(这里说的所有内容,个人推测应该也包括 ClientHello 时客户端生成的随机数等)的 hash 值(应该就是数字签名),用来供服务器校验(应该是用来防止最开始说的篡改风险)。

这里涉及到了第三个随机数,也是最关键的那个。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把 “会话密钥”。

此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

2.2.4 服务器的最后回应

服务器收到客户端的第三个随机数 pre-master key 之后,计算生成本次会话所用的 “会话密钥”。然后,向客户端最后发送下面信息。

(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的 hash 值,用来供客户端校验。(同理)

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用 “会话密钥” 加密内容。

3. 补充
3.1 非对称加密时的私钥和公钥

在非对称加密阶段,私钥和公钥只使用了一次,其中公钥用于客户端加密第三个随机数 pre-master key,私钥用于服务端解密获取客户端传输过来的 pre-master key。

3.2 关于三个随机数

"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。

pre master 的存在在于 SSL 协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么 pre master secret 就有可能被猜出来,那么仅适用 pre master secret 作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上 pre master secret 三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

3.3 客户端是怎么验证服务端的证书的

前提:客户端会预置有效的根证书。

有效的证书需要由权威机构 CA(数字证书管理机构) 签名,CA 会用自己的私钥来生成数字签名。这个权威机构CA 客户端是可以完全信任的,客户端浏览器会安装 CA 的根证书,由 CA 签名的证书是被 CA 所信任的,这就构成了信任链,所以客户端可以信任该服务器的证书。

客户端与服务器建立 SSL 连接时,服务器将自身的证书传输给客户端,客户端在验证证书的时候,先看 CA 的根证书是否在自己的信任根证书列表中。再用 CA 的根证书提供的公钥来验证服务器证书中的数字签名,如果公钥可以解开签名,证明该证书确实被 CA 所信任。再看证书是否过期,访问的网站域名与证书绑定的域名是否一致。这些都通过,说明证书可以信任。

接下来使用服务器证书里面的公钥进行服务器身份的验证。 客户端生成一个随机数给到服务器。 服务器使用私钥对随机数进行签名,并回传给到客户端。 客户端用服务器证书的公钥(因为上一步已经验证了证书是可信的,则证书中的公钥是有效的)对随机数的签名进行验证,若验证通过,则说明对应的服务器确实拥有对应服务器证书的私钥,因此 判断服务器的身份正常(因为私钥负责签名,公钥负责验证)。否则,表明服务器身份被伪造。这些都没问题才说明服务器是可信的。

3.4 是如何防止篡改风险的(暂时的推测)

关于防止被篡改,应该分为握手阶段与正式的数据通信阶段。

在握手阶段呢,客户端传输给服务端的数据,以及服务端传输给客户端的数据,都需要防止被篡改。

下面的内容暂时为本人的推测,还没有找到确定的资料进行验证。

握手阶段:

(1)客户端传输给服务端的数据,是在客户端回应的时候(见 2.2.3 )时(注意数字签名的时机)才会将数字签名一起将之前传输的所有内容进行数字签名并发送给服务端,此时客户端已经可以具备关键的 pre-master key,因此可以在本端生成 “会话密钥”,这个密钥是对除服务端外进行保密的,因此 猜测 此时客户端应该利用 “会话密钥” 对之前的内容进行数字签名(注意,数据加密是使用公钥),然后服务端接收到内容后,会使用私钥进行解密,这里应该就是关键了,即如果服务端接收到的数据被篡改了,那么解密出来的 pre-master key 肯定是有问题的,拿着这个有问题的 pre-master key 得出的 “会话密钥” 也是有问题的,然后拿着有问题的 “会话密钥” 对数字签名进行验证,则是验证无效的。(基于签名与验证都是同一 “钥匙”)

(2)服务端传输给客户端的数据,则是利用只有服务端自身知道的私钥来进行数字签名,然后客户端使用公钥来验证签名。

数据通信阶段:

而正式通信时的数据,有两种可能,双方都是用只有自己与对方知道的 “会话密钥” 进行数字签名以及验证。

或者客户端传输给服务端时,使用前面说的,而服务端传输给客户端时,服务端使用私钥签名,客户端使用公钥验证。

而至于通信时防止被冒充,应该也是基于数字签名的,通过数字签名的验证,确认数据没有被篡改,则对方没有被冒充。

3.5 一个脑洞

在总结的时候,突然想着,假设攻击者一开始就伪装成客户端,跟服务端建立起来了 HTTPS 通信。

想到这里,细想起来,发现其实这种想法有点多余。

首先,前面提过服务端也可以要求客户端提供被授权的密钥(就要某些金融机构的 U 盾),用来验证客户端的身份。

其次,就要没有要求客户端提供身份验证,此时攻击者伪装成了客户端跟服务端建立起了 HTTP 通信,有了 “会话密钥”,但是这个密钥是一次性的,而且正常的客户端跟服务端通信的时候,涉及到重要内容,肯定是基于账号密码的,攻击者即使与服务端建立了 HTTPS 通信,但是不知道有效的账号密码,也就无法进一步获取敏感数据。而如果攻击者知道某个用户的账户密码,此时也不关 HTTPS 通信什么事了,因为本身就被黑了。

HTTPS 的目的是为了防止通信时数据被窃听、篡改,以及正在通信时的双方被冒充,注意,这里说的是通信进行时防止被冒充。

参考文章

1、SSL/TLS 协议运行机制的概述
2、图解 SSL/TLS 协议
3、https://www.cnblogs.com/changbaishan/p/7676615.html
4、详解https是如何确保安全的?
5、为什么HTTPS比HTTP更安全?

补充视频 强烈推荐

【web安全3】【硬核】HTTPS原理全解析

从Delphi 7到Delphi 10.4.1的代码迁移:关键挑战与实用解决方案 本文详细探讨了从Delphi 7升级到Delphi 10.4.1进行代码迁移的关键挑战与实用解决方案。核心内容包括应对Unicode字符串处理、64位数据类型变化、VCL/FMX界面框架选择、第三方组件迁移以及数据库层现代化改造(如从BDE迁移至FireDAC)。文章为开发者提供了系统的迁移前准备、核心问题攻克策略及测试落地指南,旨在帮助团队高效、平稳地完成系统现代化升级。 阅读详情

相关推荐

Cadence Virtuoso实战:3分钟搞定反相器参数化设计(附CDF配置避坑指南)

本文详细介绍了如何在Cadence Virtuoso中利用CDF参数传递功能实现反相器的参数化设计,包括PMOS和NMOS的基础搭建、CDF配置技巧及常见报错解决方案。通过实战案例和避坑指南,帮助工程师快速掌握高效设计方法,提升集成电路设计效率。

weixin_28292761的博客 334

https原理学习笔记

https是使用tls/ssl加密的http协议。http是明文传输,存在信息窃听、信息篡改和信息劫持的风险,而tls/ssl协议具有身份验证、完整性校验和信息加密的功能,所以可以避免这些问题。

yuubeka的博客 2084

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

简单光学 1万+

HTTPS的通信过程,HTTP状态码简介,DNS解析过程

HTTP是不会对请求的双方进行身份验证的,服务器不会校验客户端的身份,谁都可以向服务器发送请求,任何人都的请求都会进行响应; 客户端也不会验证响应的数据是否是由自己请求的目标服务器所发出。2.明文通信,数据可能被窃取 3.无法验证报文的完整性,内容可能被篡改HTTP的请求过程中是不会对通信内容进行加密的,在网络中一旦请求或响应的数据被窃取就会导致数据泄漏,造成数据安全问题。3.无法验证报文的完整性,内容可能被篡改HTTP不会验证数据的前后...

lyz_yyds107的博客 1160

elevation mapping算法3之使用D435i相机离线或在线订阅点云和tf关系生成高程图

本文主要学习使用D435i相机发出的点云作为高程图的点云输入,如何离线输入点云生成高程图,进一步学习如何在线订阅点云生成高程图。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 3488

第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)

本文详细介绍了TMC2240电机驱动芯片的正反转实现方法,重点解决方向切换时的抖动和冲击问题。文章首先明确了硬件连接、基础配置和使能状态三个前提条件,然后阐述了DIR引脚电平控制方向的核心原理,提供了STM32的GPIO配置代码。针对方向切换时的电流冲击问题,作者提出了"停止-延迟-切换-启动"的平滑切换逻辑,并给出了包含方向枚举、转速控制和方向切换函数的完整代码实现方案。通过这种优化方法,可以有效避免电机在正反转切换时产生的抖动、冲击声和发热问题,实现稳定的双向控制。文章还提示了后续可

BackCatK Chen的博客 2073

https学习笔记

weixin_45919592的博客 3032

Spring Boot入门(03): 从零开始学习配置文件:掌握YAML和Properties,轻松应对多环境配置管理

在Spring Boot开发中,配置文件是非常重要的。本文将带领你从零开始学习配置文件,掌握YAML和Properties的语法,轻松应对多环境配置管理。无论是开发、测试还是生产环境,你都可以轻松切换不同的配置文件,并且能够灵活修改配置信息。

**My Coding Family** 4万+

网络通信必备基础之SSL握手&DNS解析(三)

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将继续从以下两个内容来介绍网络通信必备基础: [SSL握手过程详解] [DNS解析] 一、SSL握手过程详解 1.1、客户端发出加密通信请求ClientHello 提供: 1,协议版本(如TSL1.0) 2,随机数1(用于生成对话密钥)...

AndroidAlvin的博客 376

用 SAP-ABAP-1 把 ABAP 代码理解这件事交给 AI:从遗留代码到 ABAP Cloud 的开发加速器

SAP-ABAP-1是SAP推出的首个专用ABAP基础模型,专注于理解和解释ABAP代码,帮助开发者更快迁移和维护遗留系统。它强调ABAP Cloud合规编码实践,通过SAP AI Foundation提供访问,主要能力包括代码解释、业务语义理解和框架约束分析。相比通用模型,它能更好处理ABAP特有的版本差异、权限控制和扩展边界等问题。该模型可集成到多种开发环境中,支持文件化开发体验,并能与SAP Joule等工具协同工作,为ABAP团队提供智能辅助。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3822

vue2 - elementUI表格table树形结构复选框勾选父子联动示例,el-table树状表格tree复选框checkbox多选框全选/反选取消children(当子级全选中,父级自动勾选)

vue2,elementui,el-table树状表格多选,树形结构结合多选框使用,实现单选父子联动全选反选,勾选联动父级勾选,表格多选check父子联动,table表格children如何嵌入复选框,el-table使用多选框与树形数据写一个有半选全选功能的表格,el-table树形表格实现复选框多选效果,表格树状结构多选,每一个row都可以选中并且联动全选按钮,table选父带子选子带父,树形数据与懒加载,Table表格树形结构多选框选中父级时会选中子级,elementUI表格里树形结构嵌套复选框全选全

✅ 精选推荐文章 1万+

安全https,dns笔记整理

笔记

aksu747的博客 1137

PCB仿真软件:Altium Designer_(15).AltiumDesigner的版本控制与项目管理

在进行PCB设计时,版本控制和项目管理是确保设计质量和团队协作效率的关键。Altium Designer 提供了强大的版本控制和项目管理功能,可以帮助设计团队更好地管理和维护项目。本节将详细介绍如何在Altium Designer中进行版本控制和项目管理,包括如何使用版本控制系统、如何管理项目文件、如何进行团队协作等。

kkchenjj的博客 1202

http笔记整理:https

安全: 如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认。 SSL 即安全套接层(Secure Sockets Layer),目前应用的最广泛的 TLS 是 1.2。 TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术 实验环境使用的 TLS 是 1.2,客户端和服务器都支持非常多的密码套件,而最后协商选定的是“ECDHE-RSA-AES25.

Linzhongyilisha的专栏 392

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

tcp https 整理笔记

TCP 如何保证可靠性 应用数据被分割成 TCP 认为最适合发送的数据块。 TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。 TCP 的接收端会丢弃重复的数据。 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理

weixin_45515047的博客 1377

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

整理笔记:HTTP与HTTPS的定义、区别、优缺点

文章目录HTTP的定义HTTPS的定义HTTP和HTTPS的区别HTTPS的优缺点 HTTP的定义 HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。 它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。 请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。 HTTPS的定义 HTTPS (全称:Hyper Text Trans...

weixin_45649763的博客 368

Https接口调用问题

Https接口调用问题

yfs1024 951

从零散笔记到结构化知识库:我的文档网站建设之路

网站已经部署一段时间,当前已完成部分文档的整理。如果感兴趣,可以访问查看相关内容。原创作者: aser1989转载于: https://www.cnblogs.com/aser1989/p/18814304。

weixin_26841743的博客 102

Overleaf笔记整理

Overleaf笔记整理 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库包含了一份精心整理的Overleaf笔记,作者根据Overleaf官方文档的内容,进行了详细的整理和归纳,旨在帮助用户更好地理解和使用Overleaf进行文档编写。 内容 笔记标题:Overleaf笔记(1) 笔记描述:本笔记为作者根据Overleaf官方文档整理而成,内容全面,结构清晰,涵盖...

gitblog_06790的博客 373

Java高级markdown笔记整理(尚硅谷康师傅)

Java基础markdown笔记整理(尚硅谷康师傅) Java高级部分的也整理出来了,大家需要自取哈 预览一下~~ 链接:https://pan.baidu.com/s/1pnBQHw4zLsphcynDq7nvUg 提取码:96gp 希望可以共同进步!冲冲冲!!!! ...

liumengqi11的博客 2566
上一篇: TCP 与 UDP 笔记整理
下一篇: 【LeetCode】55. 跳跃游戏
OneDeveloper
博客等级 码龄9年 61粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值