https安全传输揭秘

news2024/11/29 6:39:32

HTTPS是什么

我们知道HTTP是明文传输的,恶意的中间人和窃听者通过截取用户发送的网络数据包可以拿到用户的敏感信息。尤其是涉及网上交易,银行转账等操作更是危害极大。

HTTPS的核心是SSL/TLS安全协议层,该层位于应用层和传输层之间,TLS对应用层数据加密后再向下交给传输层,以解决HTTP安全传输的问题。

下面我们就一起来梳理一下TLS在背后做了哪些事情,为我们的互联网行业保驾护航。

身份验证

发送方与接收方在决定数据传输之前,第一步要做的必然是互相确认对方的身份。TLS使用数字证书帮助确认证书持有者的身份。

证书

证书是一数字形式的身份证明,通常由CA进行颁发。证书中包含了证书持有者的信息,有效期,公钥,序列号,以及证书颁发者的数字签名。

CA

CA(Certificate Authority),数字证书认证机构是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

CA的作用可以用公安局来做个类比,负责给公民颁发居民身份证,身份证上的信息都是公安局签字确认过的,具有权威性。

数字签名

数字签名是非对称加密技术的另一项应用。它的原理非常简单:公私钥是成对使用的,使用私钥加密的密文,只能使用公钥来解密。因为私钥只有特定服务器才知道,所以如果公钥可以解密用私钥加密的密文,必然证明是该服务器发送的。私钥用来数字签名,表明报文是特定服务器发送的;公钥用来验证数字签名。

数字签名是使用私钥加密的校验和。将数字签名附加到报文上,一并发给接收方。

数字签名的作用:

  • 证明是作者编写了这条报文;
  • 可以防止报文被篡改。

描述一下整个身份验证的过程:

1.客户端向服务器发起请求
2.服务器将CA发给自己的证书发送给客户端
3.客户端在本机查找该CA是否在本机的CA列表中
4.如果存在,客户端使用该CA的公钥对该证书上的CA数字签名进行验证
5.如果验证通过,说明该证书确实是CA颁发的。
6.客户端查看证书是否在有效期,证书上的信息是否与当前访问的域名一致。
7.如果确认一致,则证明该证书属于该服务器所有。

加密

TLS需要解决的问题是安全地交换对称密钥,使用对称密钥进行数据的加解密。

加密有两种主要的技术:对称密钥加密和公开密钥加密。 这两种加密技术,TLS都在使用。

对称密钥

在对称密钥加密中,密钥既用于加密也用于解密。消息交换的双方需要同时知道该密钥。对称密钥加密常用于大数据量的加解密,相比非对称密钥加密,它的加密速度要快得多。常见的对称密钥加密算法有DES3-DESRC2RC4,和AES

公开密钥加密

公开密钥加密是一组密钥对,由复杂的数学运算得出。其中一个密钥对外公开称之为公钥,通常密钥持有者让CA把自己的公钥写到证书中对外发布。另一把密钥由持有者秘密保存。两把密钥一起协作,一把用来加密,另一把用来解密:如果公钥用来加密,那么只有对应的私钥能解密;如果私钥用来加密,同样只有对应的公钥才能解密。这种特殊的关系使得公开密钥加密有两种重要的应用。首先,任何一个取得了服务器公钥的人,都可以用该公钥加密数据,同时只有该服务器私钥的拥有者才可以进行解密。其次,如果服务器使用私钥加密数据,那么任何取得该服务器公钥的人都可以对服务器发送的数据进行解密。这也是数字签名的实现基础。最常见的算法是RSA

加密技术优点缺点
对称密钥加解密速度快,性能好密钥交换有泄露风险
公开密钥不存在密钥交换窃取的风险;可以用作签名验证身份计算复杂,性能差

TLS使用公钥加密对服务器进行身份验证后,在客户端和服务器之间商定对称密钥。随后使用商定的对称密钥加密会话过程中的大量数据。这种方案既利用公钥加密解决了身份验证和密钥交换的问题,又结合了对称密钥加密大量数据速度快的优点。

安全会话建立的完整过程

以上我们已经对TLS的功能和实现方式有了一个初步的了解。接下来,我们将对安全会话建立的细节做一个详细的介绍。

整个安全会话的建立,TLS是以握手的过程来协商的,具体过程下图所示:

可以看到握手协议通过一系列的有序的消息协商数据会话所需的安全参数。

客户端先发送消息启动握手

Client Hello

客户端向服务器发送Client Hello以发起会话,Client Hello包含以下信息:

  • 版本号。客户端可以支持的最高版本的协议。
  • 随机数。长度为32字节的随机数。由4字节的客户端时间加28字节的随机数组成。
  • sessionID。sessionID用来恢复之前的会话。恢复之前的会话很有必要,因为创建新的安全会话,需处理器进行密集的计算得到会话密钥。通过sessionID恢复已有的会话可以避免此问题。
  • 加密套装。客户端可以支持的加密套装列表。例如TLS_RSA_WITH_DES_CBC_SHA,TLS是协议的版本,RSA是密钥交换的非对称加密算法,DES_CBC是对称加密算法,SHA是散列方法。
  • 压缩算法。客户端支持的压缩算法。

如下是一个 Client Hello消息的示例:

ClientVersion 3,1
ClientRandom[32]
SessionID: None (new session)
Suggested Cipher Suites: TLS_RSA_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_DES_CBC_SHA
Suggested Compression Algorithm: NONE 

服务器响应

服务器收到客户端的hello消息后,同样以hello消息应答:

Server Hello

服务器向客户端发送Server Hello,该消息包括以下内容:

  • 版本号
  • 随机数。服务器端随机数,由服务器时间+随机数组成。与客户端随机数一起生成master keymaster key用来生成会话密钥。
  • sessionID。用来恢复会话。有三种情况:* 新sessionID。客户端没有指明sessionID,服务器返回一个新的sessionID。如果客户端指明了sessionID,但是服务器无法恢复对应的会话,也会重新生成一个sessionID。* 恢复的sessionID。客户端指明要恢复的sessionID,同时服务器可以恢复该会话。* 无。是新的会话,但服务器不希望将来恢复该会话,所以不返回sessionID。
  • 加密套装。服务器选择一个服务器和客户端都支持的最强的加密套装。如果没有彼此都支持的加密套装,那么会结束会话,发送一个握手失败的警告。
  • 压缩算法。指定选用的压缩算法。

下面是一个Server Hello消息的例子:

Version 3,1
ServerRandom[32]
SessionID: bd608869f0c629767ea7e3ebf7a63bdcffb0ef58b1b941e6b0c044acb6820a77
Use Cipher Suite:
TLS_RSA_WITH_3DES_EDE_CBC_SHA
Compression Algorithm: NONE 

Server Certificate

服务器向客户端发送证书。服务器证书包含了服务器的公钥。客户端使用服务器公钥验证服务器的身份,对premaster secret加密。

客户端还会检查证书上声明的服务器名字。该名字必须与客户端正在访问的服务器名称匹配。例如,用户在浏览器中输如daojia.com,那么该证书中的服务器名必须是daojia.com*.daojia.com。如果两者不匹配,浏览器会给用户警告。

Server Key Exchange

可选项,服务器创建并向客户端发送一个暂时的密钥。该密钥可用于加密Client Key Exchange消息。该步骤只有在公钥算法没提供必要的密钥生成元素时才需要,例如当服务器证书中没有公钥时。

Client Certificate Request

可选项,当服务器需要客户端提要身份证明时需要。该步骤适用于那些在提供敏感信息之前需要客户端验证自己身份的网站(例如银行站点)。

Server Hello Done

该信息表示服务器响应完成了,正在等待客户端响应。

客户端响应

服务器回复结束,客户端开始应答,应答消息如下:

Client Certificate

如果服务器向客户端请求证书,客户端需要发送自己的证书给服务器,以验证自己的身份。客户端证书中有客户端的公钥。

Client Key Exchange

客户端根据hello消息中发送的随机数计算出premaster secret,使用服务器公钥对其加密后发送给服务器。

premaster secret非常重要,因为客户端和服务器需要用它和前边的随机数,在本地独立计算master secret,然后基于master secret生成会话密钥,会话密钥就是安全传输时数据加密的对称密钥。

Certificate Verify

客户端使用私钥对目前为止所有的消息进行hash计算后进行签名。接收者使用签名者的公钥验证签名,确保它是客户端私钥签的名。只有当服务器请求客户端证书时才需要发送该消息。

Change Cipher Spec

该消息通知服务器此后的所有信息都将使用商定的密钥和算法进行加密。

Client Finished

该消息是先前的握手消息的加密校验和。使用hash函数计算所有握手消息的hash值,然后使用会话密钥进行加密后作为该消息的内容。

服务器响应

Change Cipher Spec Message

该消息通知客户端服务器将使用刚刚协商的密钥加密数据。

Server Finished

Client Finished类似,该消息是整个握手消息的hash值,hash值使用会话密钥加密处理。如果客户端能成功解密和验证包含的hash值,那么可以证明握手是成功的,客户端计算出的密钥和服务器计算出来密钥匹配。

服务器响应完成后,整个握手环节结束。一切正常的话,安全会话建立成功,https安全连接建立成功,客户端和服务器接下来可以安全地传输应用层数据了。

完整的握手过程描述

1.客户端向服务器发送Client hello,向服务器发送客户端随机数和支持的加密工具。
2.服务器发送Server hello响应客户端,向客户端发送服务器随机数。
3.服务器将证书发送给客户端,有的服务器还可能请求客户端证书。
4.如果服务器请求客户端证书,客户端需要发送证书给服务器。
5.客户端创建随机的pre-master secret,使用服务器证书中提供的公钥进行加密后,发送给服务器。
6.服务器收到pre-master secret。客户端和服务器基于pre-master secret独立生成 master key和 会话密钥。
7.客户端发送Change cipher spec通知服务器自己接下来要使用两边协商好的会话密钥加密数据了。客户端还需要发送Client finished消息。
8.服务器收到Change cipher spec后,开始使用会话密钥对数据加密。服务器发送Server finished消息给客户端。
9.至此通信双方可以使用建立的安全通道进行数据传输了。两边传送的所有信息都是经过会话密钥加密过的。

如何避免多次繁复的握手过程

如果每次https连接都要进行这么长的协商过程效率太低,因此tls支持基于sessionID保存会话,以便下次访问时快速恢复会话。

在完整的安全会话协商过程中,服务器向客户端发送了一个sessionID。随后,客户端在ClientHello消息中携带sessionID,这意味着客户端还记得之前与服务器商定的加密套装和密钥。如果服务器也记得的话,会在ServerHello消息中携带sessionID。

简化的过程如下:

 ClientServerClientHello --------> ServerHello[ChangeCipherSpec]<-------- Finished[ChangeCipherSpec]Finished-------->Application Data<-------> Application Data 

握手过程描述

1.客户端向服务器发送Client hello消息,不过消息中带上需要恢复的会话的sessionID。
2.服务器查找自己的缓存,如果找到了匹配的sessionID,并且可以恢复,则向客户端发送带有sessionID的 Server hello消息。
3.客户端和服务器互相交换Change cipher spec消息,并且发送Client finishedServer finished
4.客户端和服务器恢复安全会话。

通常浏览器打开HTTPS连接时需要完整的握手过程,随后对同一个服务器的请求进行快速握手。服务器通常15s后会关闭非活动状态的连接,但是会话信息一般保存的时间很久(数小时甚至几天)。

总结

https协议解决安全传输的核心是TLS协议。TLS在解决安全传输时主要处理的问题就是身份识别和密钥交换。这两个问题的解决依赖于公开密钥加密技术。以公开密钥加密技术为基础的数字证书系统是互联网安全传输的基石,是信任链的根基。

啰啰嗦嗦写了很多,目的还是希望能把细节交待的更清楚,能把一些生涩的术语讲的相对易懂一些,如果大家还是有些地方看的不清楚,可以在留言互动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识异常(Java系列10)

目录 前言&#xff1a; 1.异常的概念 2.异常的分类 2.1编译时异常 2.2运行时异常 3.异常的处理 3.1如何抛出异常 3.2异常的捕获 3.2.1异常的声明 3.2.2try-catch捕获并处理 3.3异常的处理流程 4.自定义异常类 结束语&#xff1a; 前言&#xff1a; 相信在大家学…

Windows常用命令整理

之前写了一篇关于Windows快速打开服务_陌客依天涯的博客-CSDN博客_服务快捷键 的文章&#xff0c;有表示windows还有很多常用的&#xff0c;那就整理一下&#xff0c;分享跟多点&#xff0c;希望对大家有用。 1、mstsc /*快速开启远程连接客户端*/ 2、regedit /*快速打开注册…

AcWing 1227.分巧克力(二分)

一、题目信息 二、思路分析 先从数据范围入手&#xff0c;这道题的数据范围最大是10的5次方&#xff0c;这就说明我们解决问题时的用到的算法的时间复杂度要控制在O(n)O(n)O(n)或者O(nlog(n))O(nlog(n))O(nlog(n))。 而O(nlog(n))O(nlog(n))O(nlog(n))的算法中最常用的是二分或…

基于RateLimiter+Aop+自定义注解实现QPS限流

QPS秒级限流一、Aop二、自定义注解三、测试类实例QPS简介&#xff1a;QPS&#xff08;Query Per Second&#xff09;&#xff0c;QPS 其实是衡量吞吐量&#xff08;Throughput&#xff09;的一个常用指标&#xff0c;就是说服务器在一秒的时间内处理了多少个请求 —— 我们通常…

控制流分析之构建支配树

控制流分析之构建支配树引言1 分析有向图2 构建支配树2.1 求最小半支配点2.2 求最近支配点引言 如上一个带有起始入口点的有向图为例&#xff0c;从A到Q的必经结点有A、L、M、Q&#xff0c;我们称其为Q的支配点&#xff0c;其中M为Q的最近支配点。我们将每个结点的最近支配结点…

分享124个PHP源码,总有一款适合您

PHP源码 分享124个PHP源码&#xff0c;总有一款适合您 源码下载 链接&#xff1a;https://pan.baidu.com/s/1AIktEQ0-cPRoSSAw_eA2Lw?pwdfb9m 提取码&#xff1a;fb9m 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0…

2022 Apache APISIX 年度记忆

时光已逝&#xff0c;转眼 2022 年已然落下了帷幕。Apache APISIX 社区在众多开源爱好者和开发者的陪伴下&#xff0c;又一起走过了新的四季。 在过去的一年中&#xff0c;我们的开源项目和社区都取得了许多成就&#xff0c;并得到了来自全球范围的广泛关注和支持。2022 年&am…

数据库管理与表文件管理

数据库管理&#xff1a; 1.MySql服务器管理数据库位置&#xff1a;C:\ProgramData\MySQL\MySQL Server 5.5\data 2.查看所有的数据库名 show databases; mysql> show databases;&#xff08;查看有哪些数据库 这属于MySql的命令&#xff0c;不属于SQL语句&…

硅基仿生业务全面 Serverless 容器化,14万+问答库助力糖尿病科普

作者&#xff1a;宁佑章&#xff08;硅基仿生科技&#xff09;、元毅&#xff08;阿里云容器服务&#xff09; “使用阿里云容器服务 Knative&#xff0c;解决了开发迭代慢的问题&#xff0c;加速了深度学习模型的性能提升&#xff1b;同时提供了弹性可伸缩的资源配置&#xf…

关于Linux宝塔面板nginx配置关于php项目的跨域请求

1、网上有好多跨域请求的案例。最多的如下&#xff1a; 在项目下的配置文件中添加&#xff1a; #add_header Access-Control-Allow-Origin * always; #add_header Access-Control-Allow-Credentials true; #add_header Access-Control-Allow-Methods GET,POST,OPTIONS…

新库上线 | CnOpenData中诚信绿金ESG评级数据

中诚信绿金ESG评级数据 一、数据简介 在碳达峰、碳中和的时代浪潮下&#xff0c;以环境、社会、公司治理为核心的ESG投资理念迅速成为发现资本市场投资机遇、规避投资风险的利器。中诚信绿金在多年信用评级经验的基础上通过建立契合国内政策趋势、信息披露现状、行业发展情况…

applicationContext讲解

applicationContext讲解 生成bean 豆子&#xff0c;bean工厂&#xff0c;对象的工厂 id是对象名&#xff0c;豆子的名字&#xff0c;全项目唯一&#xff0c;class是类全路径名 bean标签的底层实现是无参构造方法 <bean id"book1" class"com.nz.entity.Book&q…

【BFS 广度优先搜索】详解感染橘子最短时间问题

一、题目描述 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直…

nginx在linux上的部署

第一步、虚拟机安装新建虚拟机&#xff08;创建的时候记得打开网络连接&#xff0c;使用nat转换的方式&#xff09;linux配置上网第一种方式&#xff1a;自动获取&#xff0c;将ipv4设置为dhcp的自动获取。但是这样每次获取的ip可能不一样。使用xshell连接的时候可能需要修改。…

第四十一讲:神州防火墙透明模式的初始配置

现在要求把防火墙接入到现有的局域网中&#xff0c;尽量不改变已有的LAN架构和IP 地址分配&#xff0c;还能对内网的流量管理进行管理&#xff0c;起到对内网的安全保护作用。防火墙接入要求&#xff0c;应该选择防火墙的工作模式为透明模式。透明模式对原有网络的介入最少&…

把PBP、前端对接、钉钉集成玩透的考试系统

文/刘俊良 周亮 年佳斌 编辑/杜逸敏 一、项目背景 客户需要开发一套企业内部的考试系统&#xff0c;用于企业内部规章制度的学习及考核。系统的主要功能包括&#xff1a; 每个员工都可以进行每日答题与专项答题。根据答题结果&#xff0c;归类不同的题库以供员工查询学习。…

进击的 AI 生成,创造性的新世界!

2022年&#xff0c;AI艺术生成文本生成图像的AI绘画生成器如雨后春笋般涌现&#xff0c;以一幅幅“不明觉厉”的AI作品进入大众视野。从2月Disco Diffusion爆火&#xff0c;仅两个月后OpenAI发布DALL-E 2&#xff0c;谷歌和Meta紧随其后宣布了各自的AI”画家“Imagen和Make-A-S…

尚医通-排班规则接口-排班详情接口-前端整合(二十五)

目录&#xff1a; &#xff08;1&#xff09;医院排班-排班规则接口 &#xff08;2&#xff09;医院排班-排班规则-前端整合 &#xff08;3&#xff09;医院排班-排班详情接口 &#xff08;4&#xff09;医院排班-排班详情前端整合 &#xff08;1&#xff09;医院排班-排班…

一文分析Linux虚拟化KVM-Qemu分析之内存虚拟化

说明&#xff1a; KVM版本&#xff1a;5.9.1QEMU版本&#xff1a;5.0.0工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 深入分析Linux虚拟化KVM-Qemu之ARMv8虚拟化文中描述过内存虚拟化大体框架&#xff0c;再来回顾一下&#xff1a; 非虚拟化下的内存的访问…

剑指 Offer 07. 重建二叉树

剑指 Offer 07. 重建二叉树 一、题目 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9,20,null,null,1…