SSL协议

2023-02-18 00:00:00 ssl 协议

发展历史

  1. 1994年,NetScape公司设计了SSL协议的1.0版,但是未发布
  2. 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞
  3. 1996年,SSL 3.0版问世,得到大规模应用
  4. 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS1.0版
  5. 2006年和2008年,TLS进行了两次升级,分别为TLS1.1版和TLS1.2版
  6. 目前,主流浏览器都已经实现了TLS1.2的支持

TLS1.0通常被标示为SSL3.1
TLS1.1为SSL3.2
TLS1.2为SSL3.3

查看浏览器使用的TLS版本
《SSL协议》

Windows系统对TLS支持
《SSL协议》

SSL简介

SSL(Security Socket Layer)是一个安全协议,为基于TCP(Transmission Control Protocol)的应用层协议提供安全连接,SSL介于TCP/IP协议栈第四层和第七层之间。主要提供私密性、完整性和身份验证;我们常见的就是 SSL为HTTP(Hypertext Transfer Protocol)协议提供安全连接。SSL协议是一种在两个机器之间提供安全通道的协议,它具有保护数据传输以及识别通信机器的功能。

愈来愈多的浏览器支持SSL,SSL协议成为应用最广泛的安全协议之一。到目前为止,SSL协议有三个版本,其中SSL2.0和SSL3.0得到广泛的应用,IETF基于SSL3.0推出了TLS1.0协议(也被称为SSL3.1)。
《SSL协议》

SSL协议细节

《SSL协议》
SSL协议分为两层,下层为SSL记录协议,上层为SSL握手协议、SSL密码变化协议和SSL警告协议。

下层为SSL记录协议,主要作用是为高层协议提供基本的安全服务
建立在可靠的传输之上,负责对上层的数据进行分块、压缩、计算并添加MAC(消息验证码)、加密,最后把记录块传输给对方。

上层为SSL握手协议、SSL密码变化协议和SSL报警协议

  1. SSL握手协议:SSL握手协议被封装在SSL记录协议中,该协议允许服务器与客户端在应用程序传输和接收数据之前互相认证、协商加密算法和密钥。在初次建立SSL连接时,服务器与客户机交换一系列消息。
  2. SSL密码变化协议:保障SSL传输过程中的安全性,客户端和服务器双方应该每隔一段时间改变加密规范
  3. SSL报警协议:用来为对等体传递SSL的相关警告。如果在通信过程中某一方发现任何异常,就需要给对方发送一条警示消息通告。

SSL记录协议

SSL记录协议主要用于实现对数据的分块、加密解密、压缩解压缩、完整性检测和封装各种高层协议。
《SSL协议》
主要包括:

  1. 内容类型
  2. 协议版本号
  3. 记录数据的长度
  4. 数据有效载荷
  5. 散列算法计算消息认证代码

工作过程
《SSL协议》

  1. 将上层分下来的数据包分成合适的数据块,但是每个数据块不得超过214字节。
  2. 对每个数据块进行压缩,但是不能丢失数据信息。
  3. 计算压缩后的数据消息认证码MAC,并添加在压缩包后。添加后总长度不得超过2262字节。
  4. 对称密码加密。
  5. 给SSL添加一个首部。其中包括:内容类型、主要版本、次要版本、压缩长度等信息。通过以上过程把原始的数据加密为SSL协议的记录集。

SSL握手协议

在用SSL进行通信之前,首先要使用SSL的Handshake协议在通信两端握手,协商数据传输中要用到的相关安全参数(如加密算法、共享密钥、产生密钥所要的材料等),并对对方的身份进行验证。

“握手阶段”涉及四次通信,需要注意的是,”握手阶段”的所有通信都是明文的。

SSL会话恢复

会话恢复是指只要客户端和服务器已经通信过一次,它们就可以通过会话恢复的方式来跳过整个握手阶段而直接进行数据传输。SSL采用会话恢复的方式来减少SSL握手过程中造成的巨大开销。

两种会话机制

  1. 会话标识 session ID: 由服务器端支持,协议中的标准字段,因此基本所有服务器都支持,服务器端保存会话ID以及协商的通信信息,Nginx 中1M 内存约可以保存4000个 session ID 机器相关信息,占用服务器资源较多;
  2. 会话记录 session ticket :需要服务器和客户端都支持,属于一个扩展字段,支持范围约60%(无可靠统计与来源),将协商的通信信息加密之后发送给客户端保存,密钥只有服务器知道,占用服务器资源很少。

二者对比,主要是保存协商信息的位置与方式不同,类似与 http 中的 session 与 cookie。二者都存在的情况下,(nginx 实现)优先使用 session_ticket。

恢复过程
如果服务器和客户端之间曾经建立过连接,服务器会在握手成功后返回一个session ID,并保存对应的参数在服务器中。如果客户端和服务器需要再次连接,则需要在Client hello消息中携带记录的信息,返回给服务器。服务器根据收的到的Session ID检索缓存记录,如果有缓存,则返回一个Change Cipher Spec消息和Finished消息,如果没有缓存则正常进行握手。如果客户端能够验证通过服务器加密数据,则同样回复一个Change Cipher Spec消息和Finished消息。服务器验证通过则握手建立成功,开始进行正常的加密数据通信。

    原文作者:chenming3030
    原文地址: https://blog.csdn.net/chenming3030/article/details/124993197
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章