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

news/2025/3/17 10:40:22/

有点难受吧。我投的安全岗,秋招面一个厂的时候突然问到了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 追问:如何实时…