TLS握手过程的深入思考(秋招春招面经)

news/2024/9/8 5:33:17/ 标签: 网络

有点难受吧。我投的安全岗,秋招面一个厂的时候突然问到了TLS。一直挖一直挖。这玩意其实一般后端面经都会有,。但是我没怎么重点准备这方面。。。或者说我太自信了吧,以为就算面到也能说上一些。因为这东西大一大二的时候就看过了。现在准备的基本都是渗透测试、攻防、护网相关的。没想到突然问TLS。好多都忘了。说不上很详细来。而面试官问的实在是太深了。直接把我吓到了。确实现在找工作面试挖的都很深。

算是收获了个教训了。我怎么就没好好准备这个呢。。。唉。

一定要重视基础。

TLS握手过程图

我们以一个单向认证过程为例。实际上还会有更复杂的。还会有双向验证的情况。抓包其实就能明白很多。建议还是自己抓包。能看得很清楚。这里说的只是一个比较简单的情况。其实大部分的博客说的都是这种情况。

TLS握手的简要步骤

这只是一个简单的例子 一个单向验证过程。应该也是个TLS1.2吧。实际的握手过程非常复杂。如果想最为深入的理解,应该查看原论文,查看有关数据,大黑书等等。并且自己用wireshark等抓包。

1.客户端发送 client hello消息

其中包含一系列的内容。TLS版本,加密算法集,随机数等。

2.服务器回应SSl内容

此时服务器回应server hello消息 其中也包括了TLS版本(共同支持的) 加密算法集 另一个随机数等

之后服务器还会发送Certificate消息 附加服务器证书

最后发送ServerHelloDone

浏览器(客户端)接收证书 确定证书是否真实。是否是受信任的证书颁发机构颁发的。

3.客户端交换密钥证书

客户端用证书附带的公钥,生成premaster secret(预主密钥),作为ClientKeyExchange消息发送。

服务器收到后使用私钥解密premaster secret。

然后客户端和服务器使用premaster secret 和各自的随机数生成相同的master ket(为什么相同,因为密码学 嘻嘻 这个其实就是对称加密的密钥 生成一个相同的密钥 就可以用来对称加密了)

浏览器发送ChangeCipherSpec消息,然后使用master key加密的Finished消息。

4.服务器交换密钥证书

服务器接收并验证。同样也给客户端发送ChangeCipherSpec和Finished消息。

浏览器接收并验证。握手完成。

总结

TLS1.2的大致过程:

TLS1.3

进行了优化。客户端上来就发送公钥。

其实我们还没有谈到双向验证的问题。之前是服务端发送证书给客户端验证 为的是验证服务器的身份。可是客户端的身份怎么验证呢?其实在客户端第一步发送时 就也可以直接发送公钥证书 服务器再验证。第二步 服务器返回hello消息 也带着自己的证书 客户端也进行一个验证。在这前两步 就可以做一个双向的验证。

衍生的一些思考

1.tls握手时 服务器返回公钥证书 ,是返回的公钥和证书,还是公钥证书?

这其实应该是个简单的问题。反正我是知道的。但是很多人容易搞混。总觉得公钥是公钥 证书是证书。

在TLS握手过程中,服务器返回的实际上是公钥证书,而非单独的公钥和证书。这个公钥证书是一个包含了公钥和其他相关信息的文件,通常由受信任的第三方机构(称为证书颁发机构,CA)签发。公钥证书的主要目的是验证服务器的身份,并确保客户端与正确的服务器进行通信。

公钥证书包含以下主要信息:

  1. 公钥:服务器的公钥,用于加密客户端发送给服务器的数据或用于验证服务器发送的签名。
  2. 证书持有者信息:证书所属者的身份信息࿰

http://www.ppmy.cn/news/1503613.html

相关文章

二进制搭建 Kubernetes v1.20(中)

一、部署 CNI 网络组件 目录 一、部署 CNI 网络组件 1.flannel简介 1)UDP模式 2)VXLAN 模式 2.部署flannel ​编辑 3.Calico简介 1.flannel简介 K8S 中 Pod 网络通信:●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff0…

使用Echarts来实现数据可视化

目录 一.什么是ECharts? 二.如何使用Springboot来从后端给Echarts返回响应的数据? eg:折线图: ①Controller层: ②service层: 一.什么是ECharts? ECharts是一款基于JavaScript的数据可视化图标库,提供直观&…

【第六天】TCP和UDP的区别 TCP连接如何确保可靠性

TCP和UDP的区别 概念: TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议UDP(用户数据报协议)为应用程序提供了一种无需建立连接就可以发送封装的IP数据包的方法。 特点: TCP&am…

Python 3.12新功能(1)

Python 3.12正式发布已经很久了,我才将主要电脑的Python版本从3.11升级到最新。最近刚好工作没有那么紧张了,就来领略下这个最新版本中的新特性。 改善了错误消息 Python作为一门编程语言,简单易学容易上手,童叟无欺,深…

邦芒支招:成功找到工作要掌握的3个知识点

社会进步,企业商业竞争越来越激烈,不管身为一名职场小白或是想调换一下目前的工作的人,都想找到一个称心如意的好工作。拥有以下三点知识点,可以使我们找到工作。 1、迫不得已,别做这件事 拍桌子说“我不开了”的时候有…

SpringBoot集成GraalVM创建高性能原生镜像

1. GraalVM 原生镜像的介绍 GraalVM原生镜像为部署和运行Java应用程序提供了一种新的方式。与Java虚拟机相比,原生镜像可以以更小的内存占用和更快的启动时间运行。 它们非常适用于使用容器镜像部署的应用程序,当与 "功能即服务"&#xff08…

【JS】ES6新类型Map与Set

一、Map Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为键或值。 描述 Map 对象是键值对的集合。Map 中的一个键只能出现一次;它在 Map 的集合中是独一无二的。 Map 对象按键值对迭代——…

Java高频面试题分享

文章目录 1. 策略模式怎么控制策略的选取1.1 追问:如果有100种策略呢?1.2 追问:什么情况下初始化Map 2. 什么是索引?什么时候用索引?2.1 追问:怎么判断系统什么时候用量比较少2.2 追问:如何实时…

接口线上调用时间长排查

线上发现这个接口调用时间非常长 花费2min public void exportExcel(GetHistoryDataDTO getHistoryDataDTO, HttpServletResponse httpResponse) {List<Map<String, String>> dataList new ArrayList<>();getHistoryDataDTO.getGetHistoryDataChildren().g…

揭秘智能工牌:如何成为房企销售团队的数字化转型加速器

在这个竞争激烈的市场环境中&#xff0c;房企想要脱颖而出&#xff0c;不仅需要优质的产品和服务&#xff0c;更需要高效的销售团队。而销售团队的能力提升&#xff0c;离不开精细化管理和科技的赋能。DuDuTalk智能语音工牌&#xff0c;正是这样一款融合了AI技术与销售实战智慧…

每天网安必用的Python解码神器

作者:郭震 解码URL编码的字符串 可以使用Python的urllib.parse模块.以下是一个完整的示例,展示了如何解码这段URL编码的字符串: import urllib.parse# 给定的URL编码字符串 encoded_url "%68%74%74%70%73%3A%2F%2F%76%31%31%2E%74%6C%6B%71%63%2E%63%6F%6D%2F%77%6A%76%3…

Vue Amazing UI:高颜值、高性能的前端组件库

Vue Amazing UI&#xff1a;高颜值、高性能的前端组件库 在当今前端开发中&#xff0c;Vue Amazing UI 作为一款功能强大的 UI 组件库&#xff0c;为开发者提供了全面的解决方案。本文将介绍 Vue Amazing UI 的基本信息、特点以及如何快速部署和使用。 软件简介 Vue Amazing U…

SCI中四区,计算机选题

借助元启发式算法训练xxxxx的强化学习融合红外和可见光图像 一种基于深度强化学习的动态路xxxxx宽的软件定义网络 xxxxxxx负矩阵分解的高效网络聚类方法 改进雾计算基础设xxxxxxx衡的混合元启发式算法 利用量子计算xxxxxxx物联网设备的新型数字电路

java实现加水印功能

1-Word加水印 实现原理&#xff1a; ● 通过页眉页脚生成文字水印或图片水印&#xff0c;然后设置页眉页脚的高度以及旋转角度来设置水印。 源代码&#xff1a; 1、引入pom依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml…

【AIGC】Llama-3 官方技术报告

Llama-3 技术报告&#xff08;中文翻译&#xff09; 欢迎关注【youcans的AGI学习笔记】原创作品 0. 简介 现代人工智能&#xff08;AI&#xff09;系统的核心驱动力来自于基础模型。 本文介绍了一组新的基础模型&#xff0c;称为 Llama 3。它是一个语言模型系列&#xff0c;原…

【Android】数据存储之SQLite数据库知识总结

文章目录 SQL数据类型创建表格删除表格修改表格 数据库管理器SQLiteDatabase数据库的创建与删除 SQLiteOpenHelper使用步骤新建数据库操作类增删改查方法使用 SQLite 数据库版本更新 相关知识点ContentValues 类Cursor SQL SQL本质上是一种编程语言&#xff0c;它的学名叫作&qu…

群晖NAS结合内网穿透工具实现远程连接内网SFTP服务传输文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SAP ERP 通过SAP PO LDAP适配器与微软AD域服务系统集成案例

一、客户介绍 上海某芯片制造公司的主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片等。专注集成电路技术开发与制造&#xff0c;服务于图像传感器、图形图像信号处理芯片、低功耗芯片、射频芯片等领域的全球客户。 二、项目需求 该企业内部办公电…

一文看懂Java反射、注解、UML图和Lambda表达式

反射 定义: 反射是 java 开发语言的特征之一&#xff0c;它允许 java 程序对自身进行检查(自审)&#xff0c;并能直接操作程序内部属性&#xff0c;即就是将类中的各种成分映射成一个 java 对象&#xff0c;利用反射技术可以对一个类进行解剖&#xff0c;将各个组成部分映射成…

LinkedList 实现 LRU 缓存

LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种缓存淘汰策略&#xff0c;用于在缓存满时淘汰最久未使用的元素。 关键&#xff1a; 缓存选什么结构&#xff1f; 怎么实现访问顺序&#xff1f; import java.util.*;public class LRUCac…