百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

SSL/TLS 协议

nanshan 2024-11-18 15:14 6 浏览 0 评论

SSL/TLS 协议位于网络 OSI 七层模型的会话层,用来加密通信。SSL(Secure Sockets Layer,安全套接字层)是一种标准安全协议,用于在在线通信中建立Web服务器和浏览器之间的加密链接。SSL 通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

TLS(Transport Layer Security,传输层安全)是 IETF 在 SSL 3.0 的基础上设计的协议,它是 SSL 协议的升级版。两者差别极小,可以理解为 TLS 是 SSL 3.1。

TLS 协议结构

TLS 协议分成两层:TLS 记录协议(TLS record protocol)、TLS 握手协议(TLS handshake protocol)

TLS 握手协议负责加密以外的其他事情。握手协议分成 4 个子协议,分别是:

  • 握手协议 :负责通信双方之间协商决定密码算法和共享密钥
  • 密码规格变更协议 :负责向通信对象传达变更密码方式的信号
  • 警告协议 :负责在发生错误时将错误传给对方
  • 应用数据协议 :是将TLS承载的应用数据传达给通讯对象

TLS 记录协议负责消息的压缩、加密以及数据的认证。TLS 记录协议使用到的所有的算法等都是经过握手协议协商确认后的,以保证通讯双方是使用相同的算法。处理过程:

  • 首先,消息会被分割成多份,并用协商好的压缩算法进行压缩。
  • 其次,压缩片段会加上消息认证码以保证完整性,为了防止重放攻击还加上了片段编号。
  • 再次,压缩后的消息片段会加上消息认证码一起进行加密。加密使用 CBC 模式,初始向量是通过主密码生成。
  • 最后,加密后的报文,再加上数据类型、版本号、压缩后的长度组成的报头,就是最终的数据报文。

握手过程

  1. ClientHello(客户端 -> 服务器)
  • 客户端向服务端发送自己的信息:可用的版本号、当前时间、客户端随机数、会话ID、可用的密码套件清单、可用的压缩方式清单。
  • 可用的版本号、可用的密码套件清单、可用的压缩方式清单:因为不同的浏览器可能支持的情况不一样,所以需要发送给服务端以方便协商。
  • 当前时间:TLS不使用,但是上层的协议有可能使用。
  • 客户端随机数:后面会使用到。
  • 会话ID:客户端和服务端需要重新使用之前的连接时,会使用到此信息。
  1. ServerHello(服务器 -> 客户端)
  • 服务端向客户端发送自己的信息:使用的版本号、当前时间、服务器随机数、会话ID、使用的密码套件清单、使用的压缩方式清单
  • 使用的版本号、使用的密码套件清单、使用的压缩方式清单:这里发送的就是协商后的确定结果
  • 当前时间:TLS不使用,但是上层的协议有可能使用
  • 服务器随机数:后面会使用到
  1. Certificate(服务器 -> 客户端)
  • 发送服务器的证书,包含证书清单,客户端会对其进行验证。如果是匿名通信,则不发送该消息。
  • 如果 Certificate 不足以满足需求时,则会发送 ServerKeyExchange (服务器 -> 客户端)消息。具体的内容根据密码套件的不同而有所不同。这个不是必须的。
  • 双向认证,服务器则会发送 CertificateRquest(服务器 -> 客户端)找客户端要其证书用来验证。这个也不是必须的。
  1. ServerHelloDone(服务器 -> 客户端)
  • 通知客户端 Hello 时间结束。
  • 如果服务器要了客户端的证书,则客户端发送 Certificate(客户端 -> 服务器)将其证书发送给服务器。
  1. ClientKeyExchange(客户端 -> 服务器)
  • 这个就是最关键的一步,交换生成最终密钥的关键素材。
  • 如果是使用的 RSA,则会将经过服务器公钥加密的预备主密码随着 ClientKeyExchange 消息一起发送。
  • 如果是 Diffie-Hellman 密钥交换,则随着 ClientKeyExchange 消息一起发送的是 Diffie-Hellman 公开值。
  • 预备主密码使得服务端和客户端分别计算出相同的主密码。
  • 如果服务器向客户端发送了消息,客户端还会向服务器发送 CertificateVerify(客户端 -> 服务器)消息,这是为了向服务器证明,自己确实是真实的客户端,拥有客户端证书的私钥。为了实现这个目的,客户端会计算主密码和握手协议种传送的消息的散列值加上自己的数字签名后发送给服务器。
  1. 生成密钥
  • 根据关键的密钥素材主密码生成:对称密码的密钥、消息认证码的密钥、对称密码的CBC模式中使用的初始化向量
  1. ChangeCipherSpec(客户端 -> 服务器)和 Finished(客户端 -> 服务器)
  • ChangeCipherSpec这不是握手协议,而是密码规格变更协议。客户端告诉服务器我要换密码了。因为已经双方已经交换了密码套件信息,可以开始切换密码进行通信了。
  • Finished代表客户端已经搞定了
  1. ChangeCipherSpec(服务器 -> 客户端)Finished(服务器 -> 客户端)
  • ChangeCipherSpec服务器告诉客户端,我要开始换密码了
  • Finished代表服务器已经搞定了

相关推荐

Linux下C++访问web—使用libcurl库调用http接口发送解析json数据

一、背景这两天由于一些原因研究了研究如何在客户端C++代码中调用web服务端接口,需要访问url,并传入json数据,拿到返回值,并解析。 现在的情形是远程服务端的接口参数和返回类型都是json的字符...

干货 | 这 3 个超经典的Linux实战项目,让你分分钟入门Linux系统

编译安装nginx搭建小游戏网站编译安装流程下载nginx代码wget-P/server/tools/http:nginx.org/download/nginx1.22.0.tar.gz解压并进...

权限管理-树莓派linux⑦

前言当你在看这篇README,我感到非常荣幸。作为支持开源、分享的理念的我,给大家带来一些学习上的乐趣。由于本人并非专业的教育领域人士,很多时候天马行空,随心所欲的表达方式,可能让部分人感到不适。请根...

每天Linux学习:linux文件属性

ls-lih先通过这个命令来观察(-l列表显示目录内容详细,-i第一列显示inode,-h将文件大小显示为我们常见的kb,mb等单位)从截图中我们能看出文件属性由这9列信息组成:第1列:inod...

Linux ln、unlink命令用法

ln命令可以用来创建软链接或硬链接。1.创建软链接:ln-s源文件目标文件例如:ln-s/usr/lib/libc.so/usr/local/lib/libc.so.6这样就创建了一...

Linux 系统启动完整流程

一、启动系统流程简介如上图,简述系统启动的大概流程:1:硬件引导UEFi或BIOS初始化,运行POST开机自检2:grub2引导阶段系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器GRU...

最火的 CI/CD 平台 Jenkins 详细搭建教程(for Linux)

在正式学习Jenkins之前我们需要对两个名词有一定了解,其一是DevOps,另外一个就是CI/CD。何为DevOps?来自wiki百科介绍DevOps是一系列软件开发实践,强调开发人员(Dev)和测...

hadoop集群搭建详细方法

第一步:搭建配置新的虚拟机格式化之前先把tmp目录下所有与Hadoop有关的信息全部删除rm-rf/tmp/hadoop-centos*开启之后jps只有Java的进程:sudovi/et...

Linux 常用命令集合

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

inode文件索引,你了解嘛?你的Linux基础真的扎实嘛?

一、inode是什么?深入了解inode,就要从文件存储说起来!文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节。读取硬盘的时候,不会一个个扇区地读取,这样效率...

linux实例之创建service服务

前面我们讲过可以通过service命令来启动,重启,停止指定的服务程序。service服务可以在系统启动时,自动运行该服务,我们可以利用这一特点,创建service文件,并且让系统重启时,自动执行命令...

linux之软连接和硬连接的区别

硬连接硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的...

Linux inode 详解

简介索引节点(IndexNode)是Linux/类unix系统文件系统上的一种数据结构,用于存储有关文件或目录的元数据。它包含文件的所有信息,除了文件名和数据。inode在文件系统如何存储和检...

Bash 脚本实例:获取符号链接的目标位置

我们都熟悉Linux中的符号链接,通常称为符号链接或软链接,符号链接是指向任何文件系统中的另一个文件或目录的特定文件。本文将介绍Linux中符号链接的基础知识,并创建一个简单的bash脚本...

windows快捷方式,符号链接,软链接和硬链接

当一个软件大量的向C盘写入数据,而我们又无法修改软件保存数据的位置时,可以使用windows系统的“符号链接”(SymbolicLink)功能,将保存数据的位置修改到其它分区中。符号链接类似于我们熟...

取消回复欢迎 发表评论: