SSL/TLS握手过程

TLS握手流程分析 客户端发送:用于初始化会话消息,该消息主要包含如下信息:: 客户端发送它所支持的最高 SSL/TLS 版本;:一个 32 字节的客户端随机数,该随机数被服务端生成通信用的对称密钥(master secret);:session ID 被客户端用于恢复之前的会话: 客户端发送它所支持的加密套件列表服务端发送:服务端发送双方所支持的最高的 SSL/TLS 版本;:一个 32 字节的服务端随机数,被客户端用于生成通信用的对称密钥(master secret);:用于会话恢复; 阅读详情

一、SSL/TLS简介

SSL(Secure Socket Layer)最初是由Netscape公司开发的一个协议,其目的在于为互联网提供一个安全的通信机制。Netscape最早对外公布的版本是SSL2.0,但是由于SSL2.0有一些安全方面的缺陷,所以后来又重新设计了SSL3.0。SSL后来被IETF(Ineternet Engineering Task Force)所采纳并重新命名为TLS(Transport Layer Security),也就是说,TLS其实是SSL的后续版本。TLS1.0是SSL3.0的一个升级版本,后续的小版本还有TLS1.1和TLS1.2。现在普遍使用的是SSL3.0或者TLS1.0。

SSL/TLS协议是位于应用层和传输层(如TCP)之间的,它和具体的应用层协议无关,也就是说,任何应用层协议都可以使用SSL/TLS来获得安全通信的能力,如HTTP/FTP/SMTP等。

二、SSL/TLS基本原理

我们知道,互联网本身是一个公共的、不安全的网络。数据在互联网上传输时,无法避免会被恶意的第三方监视、偷听、截获甚至篡改,更有甚者,正在和我们通信的对方有可能根本就是假冒的,比如钓鱼网站等。既然SSL/TLS要为互联网提供一个安全通信的机制,那么它必须解决这里所有提到的安全问题,具体说,SSL/TLS通过下面三个方面来为互联网通信提供安全保证。

1. 机密性保证

SSL/TLS对要传输的数据进行加密,这样在互联网的传输数据就是加密后的密文,即使被恶意的第三方监视和偷听,由于没有解密秘钥,所以无法理解密文的意思。这也称为SSL/TSL的防偷听机制。

加密分为对称加密和非对称加密。对称加密(AES/RC4/3DES)的优点是效率高,然而对称加密使用的加密解密秘钥是一样的,这意味着加密方(即发送方)必须把秘钥发送给接收方,显然,在传输秘钥的过程中,如果不加以保护,秘钥就会被泄露。非对称加密(RSA/ECC)则克服了对称加密需要传输秘钥的弱点,但是非对称加密的效率很低,如果传输的数据量很大,那么使用非对称加密将是十分耗时的。也就是说,无论是对称加密还是非对称加密,都不能很好地满足数据加密传输的要求,为此,SSL/TLS对这两种方法取长补短,综合应用。SSL/TLS利用非对称加密来交换秘钥信息(秘钥信息并不是秘钥,而是生成秘钥时所需要用到的信息),由于秘钥信息的数据量很少,使用非对称加密还是可以接受的。而对于要传输的数据,SSL/TLS则使用对称加密,其秘钥由前面使用非对称加密传输得到的秘钥信息生成。由于秘钥信息是使用非对称加密的,所以其在传输过程中是安全的(恶意的第三方没有私钥无法进行解密)。

2. 消息完整性保证

由于恶意的第三方能够截获传输中的数据并把数据篡改后再发给接收方,所以SSL/TLS还必须提供一种方法来检测数据是否被篡改过。这也称为SSL/TLS的防篡改机制。具体地说,SSL/TLS使用MAC(消息验证码)来实现防篡改,即在发送消息之前,把该消息和一个通信双方共享的秘钥作为一个hash算法(MD5/SHA1)的输入,再把由此求得的摘要值联通消息一起发送给对方。

3. 身份真实性保证

SSL/TLS通过验证身份来确保不会和假冒的对方通信。这也称为SSL/TLS的防假冒机制。SSL/TLS使用由私钥签名的数字证书来实现防假冒。一般来说,服务器需要把它的数字证书传给客户端来验证,而客户端不一定需要提供证书。

三、SSL/TLS的握手过程

在开始传输应用程序数据之前,通信的双方必须先进行SSL/TLS握手。在握手的过程,双方交换并协商重要的信息,包括将要使用的SSL/TLS协议版本、加密算法、MAC算法、验证算法,以及用于各种算法的秘钥等。当然,任一方都可以在握手的过程中来验证对方的真伪,一旦验证失败,握手过程将被终止,同时这个SSL/TLS连接也会被终止。具体说,SSL/TLS的握手过程可以分为三个阶段:参数协商、身份验证,以及秘钥交换。

1. 参数协商

在这个阶段,客户端和服务器确定一个双方都能支持的最高版本的SSL/TLS协议,同时确定它们所使用的算法组合(Cipher Suite)。算法组合是分别用于不同目的的三个算法的组合,包含用于交换秘钥(Key Exchange)和身份验证的算法,用于加密应用程序数据的对称加密算法,以及用于消息验证的MAC算法。在SSL/TLS中,一个算法组合可以用一个字符串来表示,如“TLS_RSA_WHIT_RC4_128_MD5”,这个算法组合表示使用RSA来交换秘钥和验证身份,使用RC4来加密应用程序数据,以及使用MD5来验证消息内容(即防篡改)。另外,在这个阶段中,客户端和服务器会分别产生一个随机数,然后把其传给对方,它们将会在后面的秘钥交换阶段中用到。

2. 身份验证

如果在参数协商阶段时所确定的算法组合要求进行身份验证(如RSA),则服务器需要提供信息(服务器证书)来让客户端对齐进行身份验证。反过来,服务器也可以要求客户端提供证书,以便服务器也能够验证客户端的身份,不过这并不是必须的。是否需要验证客户端主要是根据应用程序的要求。

3. 密钥交换

在身份验证通过以后,就可以进入密钥交换阶段。注意,在这个阶段,客户端和服务器并不是直接交换秘钥,而是交换生成秘钥所需要用的信息,这个信息被称为Pre-Master Secret,其实就是一个有客户端产生的随机数。如果在参数协商阶段时所确定的算法组合指明使用RSA来交换秘钥,那么客户端将使用服务器的公钥(包含在服务器的数字证书中)来加密这个Pre-Master Secret,然后再传给服务器,由于只有服务器才有私钥来进行解密,所以Pre-Master Secret的传输是安全的。有了Pre-Master Secret之后,客户端和服务器还需要再计算一个Master Secret,这是因为最终的秘钥都是基于Master Secret而生成的。Master Secret本身则是通过对三个随机数进行计算而得到的,除了Pre-Master Secret之外,另外两个随机数则是在参数协商阶段交换的客户端随机数和服务器随机数。

最终生成的秘钥一共有4个,分别是:

  • 客户端MAC写入秘钥。客户端使用这个秘钥来计算将要发送的消息的摘要,服务器使用该秘钥来验证客户端发过了的消息,也即实现防篡改。
  • 服务器MAC写入秘钥。服务器使用这个秘钥来计算将要发送的消息的摘要,客户端使用该秘钥来验证服务器发过来的消息。
  • 客户端写入秘钥。客户端使用这个秘钥来加密将要发送的应用程序数据,服务器使用它来对收到的密文进行解密。
  • 服务器写入秘钥。服务器使用这个秘钥来加密将要发送的应用程序数据,客户端使用它来对收到的密文进行解密。
下面结合对www.sogou.com的抓包,具体看着三个阶段中的各个步骤:
总览:

  1. 客户端发送一个ClientHello消息给服务器,该消息包含客户端所能支持的SSL/TLS最高版本,以及一个支持的算法组合列表,当然,还有客户端生成的随机数。
  2. 服务器给客户端发送一个ServerHello消息,该消息包含服务器所选择的SSL/TLS版本号以及算法组合,同时还有服务器产生的随机数
  3. 如果在步骤2中所选择的算法组合包含RSA,则服务器向客户端发送它的数字证书,客户端将会验证服务器的身份。
  4. 服务器向客户端发送ServerHelloDone消息,表示服务器完成协商阶段的工作。
  5. 客户端产生一个随机的Pre-Master Secret,然后想服务器发送一个ClientKeyExchange消息,该消息包含使用服务器公钥加密的Pre-Master Secret
  6. 客户端和服务器各自使用Pre-Master Secret,步骤1中产生的客户端随机数,以及步骤2中产生的服务器随机数来计算一个Master Secret。有了Master Secret之后,客户端和服务器就可以使用Master Secret来计算后面所有需要用到的秘钥。
  7. 客户端发送一个ChangeCipherSpec通知给服务器,表明客户端将要开始使用刚才生成的秘钥来加密和验证数据。最后,客户端发送一个ClientFinish消息。
  8. 服务器收到了客户端的ChangeCipherSpec通知之后,也会对客户端发送ChangeCipherSpec通知,最后,服务器发送一个ClientFinish消息。
在完成握手之后,就可以使用握手过程中所生成的秘钥来加密应用程序数据以及验证消息了。





参考资料:《Visual C++网络编程》

SSL/TLS认证握手过程 client读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法。客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA的证书,证书也会被判定非法。哈,有人的地方就有江湖,有江湖的地方就没有绝对的安全。但SSL/TLS确实可以极大程度保证信息安全。签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA的私钥对信息摘要进行加密,密文即签名。 阅读详情

相关推荐

TLS协议详解

万字详解TLS协议,以及如何优化Https

GeniusLS的博客 2564

HTTPS篇之SSL握手过程详解

由于最近接触到的一个项目数据有些敏感,所以需要通过加密算法保证数据的安全性。由于公司之前有一套自定义传输协议并且有配套的公共代码导致客户端人员不太愿意使用 WWS 协议。且之前的协议没有协议层的数据加密。所以想参考HTTPS的加密机制使用数据加密来保证传输安全性。遂产生本篇博客。 什么是握手? 像两个人沟通一样,握手是表示一个回话的开始。对于SSL/TLS来说,通过握手建立连接,交换客户端与服务器...

kunyus的博客 1万+

使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

SSL/TLS握手过程实际上就是通信双方协商交换一个用于对称加密的密钥的过程。 这个过程实际上产生三个随机数:client random, server random, pre-master secret。 前两个随机数都是明文传送的,只有pre-master secret是加密的(RSA或者DH)。 一般生成证书的时候,签名算法可以选择RSA或者DSA算法。 如果server使用RSA证书,RSA即可以用作签名也可以用作不对称加密,pre-master secret就是用server的RSA证书中包含的公

NowOrNever 6万+

SSL原理,SSL握手过程

本文非原创,图片等资源都来自原博,仅供学习之用。原博见脚注。 缩略语 英文名称 解释 AES Advanced Encryption Standard 高级加密标准 CA Certificate Authority 证书机构 DES Data Encryption Standard 数据加密标准 HTTPS Hypertext Transfer Protocol Secure 安全超文本传输协议 MAC M...

mocas_wang的博客 6813

HTTPS详解二:SSL / TLS 工作原理和详细握手过程

HTTPS 详解系列:HTTPS 详解一:附带最精美详尽的 HTTPS 原理图HTTPS 详解二:SSL / TLS 工作原理和详细握手过程 前言 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧。还记得这张图吧。 HTTPS 和 HTTP的区别 ...

weixin_28747937的博客 1039

从轻量化到高精度:3DXML 转 STP 的工程数据升级技术指南

本文详细解析了3DXML转STP格式的工程数据升级技术,对比了两种格式在轻量化和高精度方面的特性差异,并提供了CATIA、FreeCAD及Python编程等多种专业级转换方案。通过实际案例展示了如何确保转换过程中的数据精度,适用于CAD设计、精密制造等场景,帮助工程师实现工程数据的高效升级。

weixin_29201859的博客 215

TLS/SSL 工作原理及握手过程详解

目录 前言 TLS/SSL 基础概念 密钥协商过程中存在的问题及解决办法 TLS/SSL 握手过程 前言 本文是对HTTPS 安全基础、TLS/SSL 工作原理及握手过程的总结。第一部分介绍为 HTTPS 提供安全基础的 TLS/SSL 的基础概念,及数据传输过程中密钥协商的原因。第二部分介绍密钥协商过程中存在的问题,及解决办法,其中会涉及PKI、CA 等概念。最后介绍 TLS/SSL 的握手过程。 HTTP 和 HTTPS 的区别:https://blog.youkuaiyun.com/qq_382..

Tyler_Zx的博客 2万+

树莓派教程(基于python编程)--入门篇

一:格式化SD卡 SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化 (重装烧录也要进行着SD卡格式化操作) 二:下载官方镜像 http://downloads.raspberrypi.org/raspbian_latest 三:烧录SD卡 使用Win32DiskImager将镜像烧录到格式化后的SD卡 SD卡盘根目录(/boot)下新建一个命名为ssh的...

qq_42109746的博客 6万+

高频八股——SSL/TLS的握手过程

在计算机网络的八股问题中,面试官最常问的一个问题就是:“SSL/TLS的握手过程是怎样的”,网络上的文章五花八门,概括的“握手过程”也各不相同,于是便写篇文章帮助自己理解和回顾,也希望这篇文章可以带你深入理解计算机网络中的SSL/TLS是什么,以及它的握手过程是如何进行的。

weixin_49426115的博客 1510

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 473

手把手教你用OPA运放和MOS管搭建恒流源电路(附完整电路图)

本文详细介绍了如何使用OPA运放和MOS管搭建高精度恒流源电路,涵盖核心元器件选型、电路设计、工作原理及实际搭建步骤。通过负反馈控制机制和MOS管工作区设置技巧,实现稳定的电流输出,适用于LED驱动、电池充电等场景。附完整电路图和调试技巧,助您快速掌握恒流源设计。

weixin_29239279的博客 535

SSL/TLS 握手过程详解

SSL 和 TLS 这两个术语可以互换使用,因为这些协议以相同的方式加密信息,并且在最基本的层面上执行相同的操作。并且,如果客户端猜对了并且两者已就相同的 AEAD 协议达成一致,则服务器会发送自己的密钥共享部分,计算会话密钥并以服务器完成消息结束。4、为了提供身份验证,服务器获取客户端和服务器的随机数以及将用于计算会话密钥的 DH 参数,并使用其私钥对其进行加密。这是极其重要的一步。在此示例中,我们将研究 RSA,因此客户端将生成称为预主密钥的随机字节字符串,然后使用服务器的公钥对其进行加密并传输。

OceanWaves1993的博客 5138

Python 爬虫实战:深入同花顺,抓取股票行情数据,助力投资决策

通过本次 Python 爬虫实战,我们成功地从同花顺抓取了股票行情数据,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分股票的数据,且未对股票的历史行情进行深入分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多股票的数据,并深入分析股票的历史行情走势、技术指标等,为投资者提供更有价值的数据支持。

u014481728的博客 5335

HTTPS协议详解(四):TLS/SSL握手过程

本文大部分内容摘自:http://www.wosign.com/faq/faq2016-0309-04.htm 尊重知识产权,转载注明Wosign ----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议...

郭晓东的专栏 9万+

从零开始讲PCIe(8)——PCIe拓扑与组件

从软件角度来看,根复合体内部的总线结构会被认为是一个标准的PCI总线,尽管实际上可能并不是物理的PCI总线,但它被设计为对软件呈现为PCI拓扑的一部分,以保持与旧版PCI软件的兼容性。这是由于其使用了非常高的传输速度。无论是根复合体内部的总线,还是交换机的多个端口,系统会通过与PCI相似的方式将其呈现给软件,使得传统的PCI枚举和配置流程能够继续使用。总体而言,根复合体不仅在物理上位于PCIe拓扑的顶部,而且在逻辑上也是整个PCIe系统的控制中心,它与系统中的所有PCIe设备建立连接,协调它们之间的通信。

apple_53311083的博客 2988

GEE 案例分析:利用Landsat数据进行FAI、NDVI及CHLA分析并统计平均值(巢湖为例)

浮游藻类指数(FAI)、归一化植被指数(NDVI)及叶绿素a(CHLA)是水体环境监测的重要指标。本文利用Google Earth Engine(GEE)平台,基于Landsat 5和Landsat 8数据,进行水体藻类及植被监测。

此星光明博客 1336

SSL/TLS 握手过程

SSL/TLS 握手过程 Transport Layer Security传输层安全协议High Performance Browser Networking| O'Reilly: Transport Layer Security (TLS) 发展历史 Defined Protocol Year SSL 1.0 n/a SSL 2.0 1995 SSL...

weweeeeeeee的博客 2880

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

抓包分析SSL/TLS 握手过程详解

我们知道,HTTP 协议都是明文传输内容,在早期只展示静态内容时没有问题。伴随着互联网的快速发展,人们对于网络传输安全性的要求也越来越高,HTTPS 协议因此出现。如上图所示,在 HTTPS 加密中真正起作用的其实是 SSL/TLS 协议。SSL/TLS 协议作用在 HTTP 协议之下,对于上层应用来说,原来的发送接收数据流程不变,这就很好地兼容了老的 HTTP 协议,这也是软件开发中分层实现的体现。 SSL/TLS 握手是为了安全地协商出一份对称加密的秘钥,这个过程很有意思,下面我们一起来了解一下。..

mayi_xiaochaun的博客 4389

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

说下SSL/TLS四次握手过程?

SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层,用于解决 HTTP 在传输数据时使用明文而导致的不安全问题。SSL 是 HTTP 之下,TCP 之上的一个协议层,是基于 HTTP 标准并对 TCP 传输数据时进行加密,所以 HTTPS 可以想成是 HTTP+SSL 的简称。HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信。SSL/TLS四次握手过程。

xy18990的博客 1341

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

HTTPS协议详解:TLS/SSL握手过程

HTTPS协议详解:TLS/SSL握手过程 麦峰强1 2019-12-14 18:11:22 ...

ywa037的博客 1663
上一篇: Windows 窗口层次关系
下一篇: 使用VS进行远程调试
CoderAldrich
博客等级 码龄12年 431粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值