传输层安全---SSL
传输层安全
在传输层之上实现数据的安全传输是另一种安全解决方案。一般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记录格式
- ContentType-- 8位,上层协议类型【4种】:密码变更规格,报警,握手,应用数据
- 主要版本Minnor版本 - 16位,主次版本
- 压缩长度:16位 - 加密后数据的长度,不超过2 ^ 14 + 2048字节
- 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相关推荐
- Python使用传输层安全协议TLS/SSL实现信息加密传输
推荐图书: <Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社,第9次印刷 图书详情(京东): 董付国老师17本Python系列图书均提供配套教学资源 ...
- 计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统
计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统 2022找工作是学历.能力和运气的超强结合 ...
- http --- HTTPS是在安全的传输层上发送的HTTP
HTTPS: // HTTPS是最常见的HTTP安全版本 // 是在安全的传输层上发送的HTTP// 将HTTP报文发送给TCP之前,先将其发送给了一个安全层(通过SSL协议实现),对其进行加密.然后 ...
- 安全套接字层协议SSL
一.安全套接字层协议SSL简介 安全套接字层协议是用于服务器之上的一个加密系统,它可以确保在客户端和服务端之间传输的数据是安全和加密的.要是服务器和客户端使用SSL进行安全通信,服务器必须有: 1.密 ...
- 带你一文看懂--应用层、传输层的协议,HTTP协议及实现,UDP和TCP的报文格式以及为什么3次握手和4次挥手
网络基础:TCP/IP四层模型中的典型协议--理解网络通信的流程原理 应用层协议:负责应用程序之间的数据沟通 网络版计算器:客户端向服务端传递两个数字以及一个运算符,服务端收到数据进行解析得到数字与运 ...
- TSL 传输层安全性协议
一. 介绍 传输层安全性协议 Transport Layer Security,TLS 及其前身安全套接层 Secure Sockets Layer,SSL是一种安全协议,目的是为互联网通信提供安全及 ...
- 网络安全——传输层安全协议
作者简介:一名云计算网络运维人员.每天分享网络与运维的技术与干货. 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.传输层安全协议 二.SSL协议背景 1.SSL协 ...
- 网络安全——传输层安全协议(3)
作者简介:一名云计算网络运维人员.每天分享网络与运维的技术与干货. 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.SSL密钥更改协议 二.SSL告警协议 关闭报警 ...
- 计算机网络学习笔记(一)应用层、传输层和网络层数据平面
计算机网络的主机节点(方的,数据的源或目标)和数据交换节点(圆的,按工作层次的不同可分为:中继器.交换机.路由器等). 和方的有关就叫接入点,两个圆的就是骨干节点. 端系统称为end system 或 ...
最新文章
- python tkinter选择路径控件_Python3 Tkinter选择路径功能的实现方法
- vue源码解析pdf_Vue源码全面解析八 callHook函数(触发生命周期函数)
- Codechef July Challenge 2018 : Subway Ride
- 使用win32 API 下载文件
- 【STM32】Keil5支持包下载教程
- JS制作常见通知信息(适用于手机通知信息和电脑通知信息)
- 使用Moles对静态方法做UnitTest
- --6、专业信息表(表)
- 【测试】软件测试用例设计
- HTML5 的输入类型(input type)
- access阿里云 mysql_如何使用access数据库
- 英文文献翻译-----改进三维网格分析和分割的马尔可夫随机场
- 轨迹优化 | Minimum-jerk
- 4.2.7. Aggregate Expressions
- WordPress博客系统搜索引擎优化seo全攻略-新华站长网
- ANSYS预紧力螺栓连接结构(一HyperMesh添加接触单元)
- 数据结构c语言版胡学刚答案,哈夫曼树的建立与实现(最终版)最新版
- hihoCoder1290. Demo Day
- 给一段下雪的代码。。。
- 什么是features(特征)
热门文章
- Oracle 11g win32位 window7下安装教程 (其实64位类同)
- Houdini使用Mantra渲染景深通过Nuke合成
- python RTL自动生成_利用python自动生成证件照
- php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...
- 搜狗拼音输入法输入数字和英文时总是有空格
- DM error code 达梦数据库-错误代码 汇总
- python 银行数据_Kmeans 银行数据聚类分析
- zblog采集教程无需写入zblog采集规则
- 种植牙术后的注意事项
- dell服务器设置CPU高性能,DellR720服务器提示cpu1 internal error (IERR)