传输层安全

在传输层之上实现数据的安全传输是另一种安全解决方案。一般SSL都是可执行协议软件包的一部分,从而对应用是透明的,可以也。嵌入到特殊软件包中(IE浏览器都配置了SSL)。

SSL / TLS协议

1994年Netscape开发了安全套接层协议SSL(安全套接字层),专门用于保护Web通讯

版本和历史

  • 1.0,不成熟
  • 2.0,基本上解决了网络通讯的安全问题

Microsoft公司发布了PCT(私人通信技术),并在IE中支持

  • 3。0,1996年发布,增加了一些算法,修改了一些缺陷
  • IETF内部成立传输层安全(TLS)工作组制定通用标准时,达成一致选择SSL.TLS 1.0(传输层安全性,也被称为SSL 3.1),1997年IETF发布草案,同时,Microsoft宣布放弃PCT,与Netscape一起支持TLS 1.0。1999年正式发布RFC 2246(The TLS Protocol v1.0)。

协议的设计目标

  • 为两个通讯个体之间提供保密性和完整性(身份认证)
  • 考虑互操作性,可扩展性,相对效率等

SSL体系结构

SSL协议的目标就是在通信双方利用加密的SSL信道建立安全的连接。它不是一个单独的协议,而是两层协议

  • 一次会话从握手开始,协商双方密钥等参数信息;
  • 握手完成时用密码变更规则协议发送密码变更规格消息;
  • 利用开始记录协议封装应用数据进行通信;
  • 通信中出现错误时,利用报警协议进行协调。

SSL两个主要的协议

SSL记录协议

  • 建立在可靠的传输协议(如TCP)之上
  • 它提供连接安全性,有两个特点

保密性,使用了对称加密算法

完整性,使用HMAC算法

  • 用来封装高层的协议

SSL握手协议

  • 客户和服务器之间相互鉴别
  • 协商加密算法和密钥
  • 它提供连接安全性,有三个特点

身份鉴别,至少对一方实现鉴别,也可以是双向鉴别

协商得到的共享密钥是安全的,中间人不能够知道

协商过程是可靠的

1)SSL记录协议

①fragmentation

- 上层消息的数据被分片成214字节大小的块,或者更小

②compression(可选) - 必须是无损压缩。有时候数据量很少,压缩反而会增加数据,则增加部分的长度不超过1024字节

③MAC计算:

④加密

可供选择的加密算法

IDEA 128 RC-40 40

RC2-40 40 RC4-128 128

DES-40 40

DES 56

3DES 168

福尔泰扎80

⑤最后添加SSL控制头

SSL记录格式

  1. ContentType-- 8位,上层协议类型【4种】:密码变更规格,报警,握手,应用数据
  2. 主要版本Minnor版本 - 16位,主次版本
  3. 压缩长度:16位 - 加密后数据的长度,不超过2 ^ 14 + 2048字节
  4. EncryptedData片段; - 密文数据

SSL的有效载荷 - 封装的数据

有效载荷-即SSL里记录封装的上层数据有【4种】

①ChangeCipherSpec

只有1字节,值为1.用以将握手时的延迟状态转至当前状态,更新了在当前连接上的密码机制。

②Alert

2字节第一个字节表明报警的等级(1 - 警告; 2 - 致命的);第二个字节则是具体警告的编码。

③handshake

1字节(握手消息的类型)3字节(握手消息的长度)+ N字节(本条握手消息的相关参数)

④应用数据

上层应用数据

2)SSL握手协议

SSL握手协议在记录协议之上,记录协议是一种保密的数据封装,而记录协议加密用的密钥来自握手协议。

SSL握手消息是明文还是密文?

SSL握手消息前期是明文,握手协商过程中逐渐变为密文.SSL记录协议有了密钥后才能开始密文封装。

握手协议使用的消息

消息

参数

hello_request

空值

CLIENT_HELLO

版本,随机数,会话ID,密码参数,压缩方法

server_hello

证书

X.509 v3证书链

server_key_exchange

参数,签名

certificate_request

类型,CA的

server_done

空值

certificate_verify

签名

客户端密钥

参数,签名

哈希值

SSL握手协议的流程

第一阶段:建立起安全协商

①客户发送一个CLIENT_HELLO消息:

  • 版本(版本):客户端SSL最高版本
  • 随机数(随机):32位时间戳28字节随机序列
  • 会话ID(会话ID):一个会话状态对应一组参数
  • 密码构件(CipherSuite):客户支持的密码算法列表,包括密钥交换算法和密码算法等。以优先选用递减顺序给出。
  • 压缩方法(Compression Mehod):客户支持的压缩方法表然后,客户等待服务器的server_hello消息

②服务器发送server_hello消息:

包括客户建议的低版本以及服务器支持的最高版本,服务器产生的随机数,会话ID,密钥构件域,压缩域

  • 密钥构建域(服务器从客户建议的密码算法中挑出一套,包括包以下内容)

①密钥交换方法:RSA,固定/暂态/匿名的Diffie-Hellman,以及福尔泰扎方法

②CipherSpec:密码算法,MAC算法,密码类型(流/分组),可否出口,散列码大小,密钥材料(用于产生写密钥的数据),IV大小

  • 压缩域包括

(服务器从客户建议的压缩方法中挑出一个)

第二阶段:服务器鉴别和密钥交换

  • 以服务器发送自己的证书为标志,开始第二阶段,该消息包含一个X.509证书,或者一条证书链(可选的,除匿名的Diffie-Hellman交换之外的密钥交换方法都需要证书)
  • 服务器发送server_key_exchange消息消息包含签名,被签名的内容包括两个随机数以及服务器参数。可选的,只有当服务器的证书没有包含必需的数据的时候才发送此消息
  • 服务器发送certificate_request消息 - 可选的,非匿名服务器可以向客户请求一个证书 - 包含证书类型和Cas(可接收的认证机构名称列表)
  • 服务器发送server_hello_done,然后等待应答

第三阶段:客户鉴别和密钥交换

  • 客户收到server_done消息后,它根据需要检查服务器提供的证书,并判断server_hello的参数是否可以接受,如果都没有问题的话,发送一个或多个消息给服务器
  • 如果服务器请求证书的话,则客户首先发送一个证书消息,若客户没有证书,则发送一个no_certificate警告
  • 然后客户发送client_key_exchange消息,消息的内容取决于密钥交换的类型(若是RSA方式,客户端产生一个48字节的预备主密钥预先主密钥)
  • 最后,若客户端证书具有签名功能,发送一个certificate_verify消息,该消息是对客户端启动CLIENT_HELLO后发送或接收到的所有握手协议消息填充MAC处理后进行的签名。

第四阶段:结束

  • 第四阶段建立起一个安全的连接
  • 客户发送一个change_cipher_spec(密码变更规格)消息,并把协商得到的密文拷贝到当前连接的状态之中
  • 客户用新的算法,密钥参数发送一个完成消息,包括一个校验值,对所有握手以来的消息(不包括本消息)进行校验。该消息可以检查密钥交换和鉴别过程是否已经成功。
  • 服务器同样发送change_cipher_spec消息和完成消息。
  • 握手过程完成,客户和服务器可以交换应用层数据。

如何协商实现保密通信的

  • 第一阶段,设CLIENT_HELLO给服务器提供的密钥交换方法有RSA方式:即用接收者公钥加密密钥服务器也选择并回送server_hello。
  • 第二阶段,服务器传递自己的证书(这以后就可以单方向加密了)
  • 第三阶段,客户端的密钥交换消息中就可以用服务器的公钥将生成的密钥(预备主密钥KPRE)加密后发给服务器。(至此,双方都掌握了一个密秘信息K.这以后就可双方加密)
  • 第四阶段,发送密码规格变更消息,双方确认一下。

关于双方共享的密钥

  • 加密,鉴别很多地方需要密钥和秘密初始向量等,一个秘密KPRE是不够的。
  • 第三阶段双方都知道KPRE后,各自会根据KPRE利用SSL设定的算法计算得到主密钥。然后按顺序从主密钥生成客户端写MAC密钥,服务器写MAC密钥,客户端写密钥,服务器端写密钥,客户端写初始向量IV,服务器端写初始向量IV。

思考整个过程

一次会话从握手开始,协商双方密钥等参数信息;

握手完成时用密码变更规则协议发送密码变更规格消息(双方都把会话,链接相关的参数存储在合适的位置);

开始利用记录协议封装应用数据进行通信;

通信中出现错误时,利用报警协议进行协调。

SSL的两个重要概念

SSL会话(会话)

  • 一个SSL会话是在客户与服务器之间的一个关联。会话由SSL握手协议创建。会话定义了一组可供多个连接共享的密码安全参数
  • 会话用以避免为每一个连接提供新的安全参数所需昂贵的协商代价。

SSL连接(连接)

  • 一个连接是一个提供一种合适类型服务的传输(OSI分层的定义)。
  • SSL的连接是点对点的关系。
  • 连接是暂时的,每一个连接和一个会话关联。

SSL会话

SSL会话由握手协议创建,定义了一系列相应的安全参数,最终建立客户机和服务器之间的一个关联。对于每个SSL连接,可利用SSL会话避免对新的安全参数进行代码繁多协商。

。每个SSL会话都有许多与之相关的状态一旦建立了会话,就有一个当前操作状态.SSL会话状态参数包括:

(1)会话标志符(Session Identifier)用来确定活动或可回复的会话状态;

(2)对等实体证书(Peer Certificate),是对等实体X.509 v3证书;

(3)压缩方法(Compression Method);

(4)加密规范(Cipher Spec)包括加密算法DES,3DES和IDEA等,消息摘要算法MD5和SHA-1等,以及相关参数;

(5)主密码(Master Secret),由客户机和服务器共享的密码;

(6)是否可恢复(可恢复)会话是否可用于初始化新连接的标志。

SSL连接

SSL连接是一个双向连接,每个连接都和一个SSL会话相关.SSL连接成功后,可以进行安全保密通信.SSL连接状态的参数包括7个:

(1)服务器和客户机随机数(Server and Client Random):Server和Client为每一个连接所选择的字节序列。

(2)服务器写MAC秘密(Server Write MAC Secret):一个密钥,用来对服务器送出的数据进行MAC操作。

(3)客户机写MAC秘密(Client Write MAC Secret):一个密钥,用来对客户送出的数据进行MAC操作。

(4)服务器写密钥(Server Write Key):用于服务器进行数据加密,客户端进行数据解密的对称保密密钥。

(5)客户机写密钥(Client Write Key):用于客户进行数据加密,服务器进行数据解密的对称保密密钥;

(6)初始化向量(Initialization Vectors):当数据加密采用CBC方式时,每一个密钥保持一个IV。该字段首先由SSL握手协议,以后保留每次最后的密文数据块作为IV。

(7)序列号(序列号):每一方为每一个连接的数据发送与接收维护单独的顺序号。当一方发送或接收一个改变的密码规范消息时,序号置为0,最大264-1

对SSL攻击的启示

历史上有不少针对SSL的攻击,有的并不是SSL协议本身的缺陷,而是实现上导致的缺陷,一些启示:

  • 随机数对于安全协议或者安全系统的重要性
  • 对待错误消息如何响应Contiune?

会不会招致DOS?返回精确的错误容易被分析

  • 为防止明文模式被分析,可进行随机数填充

OpenSSL - 开发自己的支持SSL的应用

目前实现SSL / TLS的软件虽然不多,但都很优秀。除了SSL标准提出者网景实现的,OpenSSL的是一个非常优秀的实现SSL / TLS的开放源代码软件包,主要是作为提供SSL算法的函数库供其他软件调用而出现的,可给任何TCP / IP应用提供SSL功能。

1995年,Eric A. Young和Tim J. Hudson开始开发OpenSSL,后来不断发展更新,直到现在,SSL还在不断的修改和完善,新版本也不断的推出。最新的版本可以从OpenSSL的官方网站http ://www.openssl.org下载。

传输层安全---SSL相关推荐

  1. Python使用传输层安全协议TLS/SSL实现信息加密传输

    推荐图书: <Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社,第9次印刷 图书详情(京东): 董付国老师17本Python系列图书均提供配套教学资源 ...

  2. 计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统

    计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统 2022找工作是学历.能力和运气的超强结合 ...

  3. http --- HTTPS是在安全的传输层上发送的HTTP

    HTTPS: // HTTPS是最常见的HTTP安全版本 // 是在安全的传输层上发送的HTTP// 将HTTP报文发送给TCP之前,先将其发送给了一个安全层(通过SSL协议实现),对其进行加密.然后 ...

  4. 安全套接字层协议SSL

    一.安全套接字层协议SSL简介 安全套接字层协议是用于服务器之上的一个加密系统,它可以确保在客户端和服务端之间传输的数据是安全和加密的.要是服务器和客户端使用SSL进行安全通信,服务器必须有: 1.密 ...

  5. 带你一文看懂--应用层、传输层的协议,HTTP协议及实现,UDP和TCP的报文格式以及为什么3次握手和4次挥手

    网络基础:TCP/IP四层模型中的典型协议--理解网络通信的流程原理 应用层协议:负责应用程序之间的数据沟通 网络版计算器:客户端向服务端传递两个数字以及一个运算符,服务端收到数据进行解析得到数字与运 ...

  6. TSL 传输层安全性协议

    一. 介绍 传输层安全性协议 Transport Layer Security,TLS 及其前身安全套接层 Secure Sockets Layer,SSL是一种安全协议,目的是为互联网通信提供安全及 ...

  7. 网络安全——传输层安全协议

    作者简介:一名云计算网络运维人员.每天分享网络与运维的技术与干货.   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.传输层安全协议 二.SSL协议背景 1.SSL协 ...

  8. 网络安全——传输层安全协议(3)

    作者简介:一名云计算网络运维人员.每天分享网络与运维的技术与干货.   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.SSL密钥更改协议 二.SSL告警协议 关闭报警 ...

  9. 计算机网络学习笔记(一)应用层、传输层和网络层数据平面

    计算机网络的主机节点(方的,数据的源或目标)和数据交换节点(圆的,按工作层次的不同可分为:中继器.交换机.路由器等). 和方的有关就叫接入点,两个圆的就是骨干节点. 端系统称为end system 或 ...

最新文章

  1. python tkinter选择路径控件_Python3 Tkinter选择路径功能的实现方法
  2. vue源码解析pdf_Vue源码全面解析八 callHook函数(触发生命周期函数)
  3. Codechef July Challenge 2018 : Subway Ride
  4. 使用win32 API 下载文件
  5. 【STM32】Keil5支持包下载教程
  6. JS制作常见通知信息(适用于手机通知信息和电脑通知信息)
  7. 使用Moles对静态方法做UnitTest
  8. --6、专业信息表(表)
  9. 【测试】软件测试用例设计
  10. HTML5 的输入类型(input type)
  11. access阿里云 mysql_如何使用access数据库
  12. 英文文献翻译-----改进三维网格分析和分割的马尔可夫随机场
  13. 轨迹优化 | Minimum-jerk
  14. 4.2.7. Aggregate Expressions
  15. WordPress博客系统搜索引擎优化seo全攻略-新华站长网
  16. ANSYS预紧力螺栓连接结构(一HyperMesh添加接触单元)
  17. 数据结构c语言版胡学刚答案,哈夫曼树的建立与实现(最终版)最新版
  18. hihoCoder1290. Demo Day
  19. 给一段下雪的代码。。。
  20. 什么是features(特征)

热门文章

  1. Oracle 11g win32位 window7下安装教程 (其实64位类同)
  2. Houdini使用Mantra渲染景深通过Nuke合成
  3. python RTL自动生成_利用python自动生成证件照
  4. php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...
  5. 搜狗拼音输入法输入数字和英文时总是有空格
  6. DM error code 达梦数据库-错误代码 汇总
  7. python 银行数据_Kmeans 银行数据聚类分析
  8. zblog采集教程无需写入zblog采集规则
  9. 种植牙术后的注意事项
  10. dell服务器设置CPU高性能,DellR720服务器提示cpu1 internal error (IERR)