详解SSL/TLS_ssl/tls 在哪一层-程序员宅基地

技术标签: 网络  服务器  TLS  SDN  ssl  

SSL/TLS的作用

不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险[3]。

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。

(2) 篡改风险(tampering):第三方可以修改通信内容。

(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

(1) 所有信息都是加密传播,第三方无法窃听。

(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。

(3) 配备身份证书,防止身份被冒充。

SSL

SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。[4]

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:

SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持

SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等

SSL协议提供的服务

1)认证用户和服务器,确保数据发送到正确的客户机和服务器;

2)加密数据以防止数据中途被窃取;

3)维护数据的完整性,确保数据在传输过程中不被改变。

SSL协议的工作流程

服务器认证阶段:

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接

2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息

3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器

4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器

用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证

TLS

TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议

TLS 记录协议提供的连接安全性具有两个基本特性

1、私有――对称加密用以数据加密(DES 、RC4 等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。

2、可靠――信息传输包括使用密钥的MAC进行信息完整性检查。安全哈希功能( SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC 的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。

TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。

TLS 握手协议提供的连接安全具有三个基本属性

1、可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。

3、共享加密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。

4、协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商

TLS的最大优势就在于:TLS是独立于应用协议。高层协议可以透明地分布在TLS协议上面。然而, TLS 标准并没有规定应用程序如何在TLS上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。

协议结构

TLS 协议包括两个协议组――TLS记录协议和TLS握手协议――每组具有很多不同格式的信息。在此文件中我们只列出协议摘要并不作具体解析。具体内容可参照相关文档。

TLS记录协议是一种分层协议。每一层中的信息可能包含长度、描述和内容等字段。记录协议支持信息传输、将数据分段到可处理块、压缩数据、应用MAC 、加密以及传输结果等。对接收到的数据进行解密、校验、解压缩、重组等,然后将它们传送到高层客户机。

TLS连接状态指的是TLS记录协议的操作环境。它规定了压缩算法、加密算法和MAC算法。

TLS记录层从高层接收任意大小无空块的连续数据。密钥计算:记录协议通过算法从握手协议提供的安全参数中产生密钥、 IV 和MAC密钥。

TLS 握手协议由三个子协议组构成,允许对等双方在记录层的安全参数上达成一致、自我认证、例示协商安全参数、互相报告出错条件。

TLS与SSL的关系

最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。

TLS与SSL的差异

1)版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1。

2)报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用了RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的是异或运算。但是两者的安全程度是相同的。

3)伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。

4)报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。

5)密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。

6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少许差别,但安全性相当。

7)加密计算:TLS与SSLv3.0在计算主密值(master secret)时采用的方式不同。

8)填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度要达到密文块长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。

TLS的主要增强内容

TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS 在SSL v3.0 的基础上,提供了以下增强内容:

1)更安全的MAC算法

2)更严密的警报

3)“灰色区域”规范的更明确的定义

TLS对于安全性的改进

1)对于消息认证使用密钥散列法:TLS 使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用的(消息认证代码)MAC 功能更安全。

2)增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。

3)改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。

4)一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。

5)特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。

SSL/TLS

安全套接字层[1]和传输层安全[2]协议提供Internet上的通信安全性和数据完整性。因此,SSL/TLS协议主要用于加密通过不安全网络发送的机密数据。SSL/TLS由两层[1]、[2]组成,一层是具有协商功能的握手协议SSL/TLS会话的参数。另一种称为记录协议,具有在握手协议生成的安全参数下传输加密数据的功能。在我们的研究中,我们主要从握手协议中提取有效特征。

图1

图1展示了SSL/TLS握手协议中交互的示例场景。

最初,客户端向服务器发送标记为 Client Hello 的加密通信请求,该请求包括五个属性:协议版本(ProtocolVersion)、随机数减1(Random Number-1)、会话ID(Session ID)、密码套件(Cipher Suite)和压缩方法(Compression Method)。

此时,服务器回复 Server Hello ,其中包括:协议版本确认(Protocol Version confirmed),随机数减2(Random Number-2), 会话ID(Session ID), 密码套件确认(Cipher Suite confirmed)和压缩方法确认(Compression Method confirmed)。

如果服务器要进行身份验证,则服务器会在服务器问候消息之后立即发送其证书。

接下来,如果服务器证书通过验证,客户端将回复随机数减3(Random Number-3), Change Cipher Spec 和客户端Finished的消息。

到目前为止,双方共享三个随机数,并使用它们作为参数来生成与上述协商的方法相同的会话密钥。

最终,服务器使用Change Cipher Spec和服务器端Finished消息进行响应。现在握手协议阶段已经结束,随后的通信受到双方协商的加密和压缩方法的保护。

总结

SSL“安全套接层”协议,TLS“安全传输层”协议,都属于是加密协议,在其网络数据传输中起到保护隐私和数据的完整性。保证该网络传输的信息不会被未经授权的元素拦截或修改,从而确保只有合法的发送者和接收者才能完全访问并传输信息。网站想要实现数据HTTPS加密协议访问,保障数据的安全,就需要SSL证书,TLS是SSL与HTTPS安全传输层协议名称。

参考文献

[1] A. Freier, P. Karlton, and P. Kocher, The Secure Sockets Layer (SSL)Protocol Version 3.0, document RFC 6101, 2011.
[2] T. Dierks and E. Rescorla, The Transport Layer Security (TLS) Protocol,document RFC 5246, The Internet Engineering Task Force, 2008.
[3] SSL/TLS协议运行机制的概述 http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
[4] SSL与TLS的区别以及介绍 https://kb.cnblogs.com/page/197396/
[5] SSL/TLS的基本概念及区别 https://baijiahao.baidu.com/s?id=1629215918985229945&wfr=spider&for=pc

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41691212/article/details/122323426

智能推荐

MySQLInnoDB引擎事物隔离级别RC和RR-程序员宅基地

文章浏览阅读305次。2019独角兽企业重金招聘Python工程师标准>>> ..._innodb默认事务隔离级别rr 好还是rc 好

Java中Thread类的interrupt(),interrupted()和isInterrupted()方法详解_thread isinterrupt方法-程序员宅基地

文章浏览阅读729次。先介绍一下这三个方法:interrupt()方法中断此线程(不一定是当前线程,指Thread实例代表的线程),该方法实际上是给线程设置一个中断状态,并没有实际中断线程,线程仍会继续执行。如果interrupt()不会中断sleep,wait,join方法,就不会抛InterruptException异常,就不会清除中断标志位,isInterrupt()返回true。如果中断sleep,w..._thread isinterrupt方法

使用C++调用并部署pytorch模型-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏13次。1.背景(Background)上图显示了目前深度学习模型在生产环境中的方法,本文仅探讨如何部署pytorch模型!至于为什么要用C++调用pytorch模型,其目的在于:使用C++及多线程可以加快模型预测速度关于模型训练有两种方法,一种是直接使用C++编写训练代码,可以做到搭建完整的网络模型,但是无法使用迁移学习,而迁移学习是目前训练样本几乎都会用到的方法,另一种是使..._because there is a cycle in the constraint graph:

图的最短路径算法_最短路径算法流程图-程序员宅基地

文章浏览阅读263次。图的最短路算法图的存储单源最短路算法Dijkstra算法Bellman-ford算法SPFA算法(Shortest Path Faster Algorithm)多源最短路算法Floyd算法两种次短路图的存储图:点集、边集。我们程序中所有存储的信息是边的信息,点的信息没有必要存。存储方式:邻接矩阵(缺点:浪费储存空间。优点:可以快速索引两个点之间边的信息)邻接表(c++用动态数组实现,..._最短路径算法流程图

Java中的LocalDate类_java localdate getdayofweek-程序员宅基地

文章浏览阅读230次。日历表import java.time.DayOfWeek;import java.time.LocalDate;public class Demo { public static void main(String[] args) { //(静态工厂方法)构造一个表示给定日期的对象 //LocalDate date = LocalDate.of(2021,9,7); //构造一个表示当前日期的对象 LocalDate date _java localdate getdayofweek

Excel文件导入导出操作_前端导出excel文件设置表头-程序员宅基地

文章浏览阅读7.6k次,点赞59次,收藏70次。日常开发工作中对于文件的相关操作大家多少都会涉及:上传解析、数据导出等。此篇内容主要分享一下工作中常用的Excel文件的解析和导出工作类实现。实践1.maven依赖首先引入POI包依赖<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version></dep_前端导出excel文件设置表头

随便推点

2.3 二进制乘法运算(定点原码一位乘)_原码一位乘法右移补什么-程序员宅基地

文章浏览阅读913次,点赞4次,收藏5次。2.3.1 原码一位乘步骤:①对给定的x*y,其中x为被乘数,y为乘数;②计算过程中取双符号位(避免加法时产生假溢出),初始时部分积为0,将乘数的数值部分的绝对值写到乘数部分。 ③判断乘数的最低位:如果为1,则执行部分积=部分积+x,且右移一位;如果为0,则执行部分积=部分积+0,且右移一位。④移位的次数=乘数的数值位的位数。 ⑤计算符号位,组合数值部分的值即为结果。 原说法有点抽象,我..._原码一位乘法右移补什么

python爬取百度天气接口【实战记录】_百度天气爬取-程序员宅基地

文章浏览阅读2.2k次,点赞5次,收藏9次。文章目录前言一、确定爬取的对象二、开始分析前言利用python 模拟浏览器获取百度的天气接口提示:以下是本篇文章正文内容,下面案例可供参考一、确定爬取的对象http://weathernew.pae.baidu.com/weathernew/pc?query=%E6%9D%AD%E5%B7%9E%E5%A4%A9%E6%B0%94&srcid=4982&city_name=%E6%9D%AD%E5%B7%9E&province_name=%E6%B5%99%E6%_百度天气爬取

JDK1.8中字符串常量池的优化之String的intern()_jdk1.8 intern-程序员宅基地

文章浏览阅读1.6k次。JDK每次升级都会做很多优化,我们使用最多的String常量类也在不断被优化。这次和大家分享的是String优化手段之一的intern()方法。源码API如下:/*** Returns a canonical representation for the string object.* * A pool of strings, initially empty, is maintained privately by the* class {@code String}.* * When th_jdk1.8 intern

myApps如何隐藏按钮_app隐藏按扭代码-程序员宅基地

文章浏览阅读119次。一、场景 在表单中一般会有【临时保存】按钮,相当于是保存草稿的功能,并且这个按钮,按照习惯,只在申请人环节中才会显示,其他流程环节需要隐藏,这时就需要用到【隐藏脚本】了。二、开发隐藏脚本 1、先在【库函数】中定义,以便到处可用//临时保存隐藏条件function LSSave(){ var rtn = true; var processor = ""; var doc = $CURRDOC.getCurrDoc();..._app隐藏按扭代码

STM32使用 jansson 处理 Json格式字符_stm32 jasson-程序员宅基地

文章浏览阅读5.2k次,点赞15次,收藏75次。STM32 Json 字符的创建和解析1、Json简介2、jansson库的下载安装和报错解决2.1、下载安装2.2、STM32工程文件中导入jansson库2.3、报错解决2.4、修改堆栈空间3、Json 字符的创建4、Json 字符的解析4.1 纯键值对4.2、键的值是一个对象4.3、键的值是一个数组  STM32处理json字符串一般不常见,大部分都是不需要处理的数据,但是在一些通信中需要处理上传或者下传的数据,就别比如在物联网中,有一部分数据就是以json格式传输的,那么就需要对数据经行解析。我简_stm32 jasson

【Python常见面试题】列表list数据如何去重,去掉列表中重复的数据_列表中存放了某门课程学生的成绩,如何去掉其中重复的成绩-程序员宅基地

文章浏览阅读1k次。# 列表去重,先使用set去重,然后使用for循环将集合转化成列表list1 = [1, 2, 1, 3, 'a', 'b', 'b']print("list1 原始数据是:%s" % list1)x = set(list1)print("list1 set之后的数据是:%s" % x)list2 = []for i in x: list2.append(i)prin..._列表中存放了某门课程学生的成绩,如何去掉其中重复的成绩