SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

相关学习资料
http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml
http://www.gxu.edu.cn/college/hxhgxy/sec/COURSE/ch13/1.htm
http://www.rfc-editor.org/rfc/rfc6101.txt
http://3600.1kapp.com/?p=546
http://wiki.mbalib.com/wiki/SSL%E4%BF%AE%E6%94%B9%E5%AF%86%E6%96%87%E5%8D%8F%E8%AE%AE
http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Technology_book/200812/622834_30003_0.htm
http://technet.microsoft.com/zh-cn/library/cc785811(v=ws.10).aspx
http://www.rfc-editor.org/rfc/rfc2246.txt

1. SSL协议格式

SSL(Secure socket Layer 安全套接层协议)指使用公钥和私钥技术组合的安全网络通讯协议。SSL协议是网景公司(Netscape)推出的基于WEB应用的安全协议,SSL协议指定了一种在应用程序协议(如Http、Telenet、NMTP和FTP等)和TCP/IP协议之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,主要用于提高应用程序之间数据的安全性,对传送的数据进行加密和隐藏,确保数据在传送中不被改变,即确保数据的完整性。
SSL 以对称密码技术和公开密码技术相结合,可以实现如下三个通信目标:

  • 秘密性: SSL客户机和服务器之间传送的数据都经过了加密处理,网络中的非法窃听者所获取的信息都将是无意义的密文信息
  • 完整性: SSL利用密码算法和散列(HASH)函数,通过对传输信息特征值的提取来保证信息的完整性,确保要传输的信息全部到达目的地,可以避免服务器和客户机之间的信息受到破坏。
  • 认证性: 利用证书技术和可信的第三方认证,可以让客户机和服务器相互识别对方的身份。为了验证证书持有者是其合法用户(而不是冒名用户),SSL要求证书持有者在握手时相互交换数字证
    书,通过验证来保证对方身份的合法性。

SSL协议位于TCP/IP协议模型的网络层和应用层之间,使用TCP来提供一种可靠的端到端的安全服务,它是客户/服务器应用之间的通信不被攻击窃听,并且始终对服务器进行认证,还可以选择对客户进行认证。
SSL协议应用层来说是透明的,我们在编写基于SSL的HTTPS应用时,无论客户端还是服务端都不需要考虑SSL的存在
SSL协议在应用层通信之前就已经完成:

  • 1) 加密算法
  • 2) 通信密钥的协商
  • 3) 服务器认证工作

SSL/TLS Protocol

在此之后,应用层协议所传送的数据都被加密。SSL实际上是共同工作的两层协议组成,如下图所示

报文格式

对于这张SSL的层次结构图,我们需要牢记几点:

  1. 不管是TCP/IP的4层协议、还是ISO的7层协议,它们都是基于接口式的松耦合层次结构的协议,也就是说,只要遵循接口的格式,中间可以插入任意的协议层,这也是SSL能存在的理论依据
  2. 所谓的高层次、低层次,本质上是一种”数据封装”的概念,高层的数据封装进底层的数据包,然后加上某些数据包的头部,仅此而已
  3. “SSL握手协议”、”SSL改变密码格式协议”、”SSL警告协议”、”HTTP..”我们都可以看成是”SSL记录协议”封装的上层应用层数据,它们都基于下层的”SSL记录协议”进行封装,从而实现自己的功能。至于为什么会有这么多的上层协议,也很容易理解,因为SSL是一种加密目的的协议,这类密码学相关的协议在初始化(握手)的过程中普遍都需要一些列的交互过程,握手协议来支持

对总体的结构有了初步认识之后,我们接下来开始深入学习SSL的协议格式,在学习的过程中,我们应该时常回忆上面的这张整体结构图,理解它们的层次关系

0x1: SSL记录协议

我们知道,SSL记录协议是用来封装上层协议数据的协议,在SSL协议中,所有的传输数据都被封装在记录中。记录是由:

1) 记录头
2) 长度不为0的记录数据

组成的。”所有”的SSL通信都使用SSL记录层,记录协议封装上层的:

1) 握手协议
2) 警告协议
3) 改变密码格式协议
4) 应用数据协议

SSL记录协议定义了要传输数据的格式,它位于一些可靠的的传输协议之上(如TCP),用于各种更高层协议的封装,记录协议主要完成:

1) 分组、组合
2) 压缩、解压缩
3) 以及消息认证
4) 加密传输等

这里写图片描述

  1. 分段
    每个上层应用数据被分成2^14字节或更小的数据块
  2. 压缩
    压缩是可选的,并且是无损压缩,压缩后内容长度的增加不能超过1024字节。
  3. 在压缩数据上计算消息认证MAC。
  4. 对压缩数据及MAC进行加密。
  5. 增加SSL记录头(内容类型、主版本、次版本、压缩长度)

最终经过封装后的SSL记录数据包格式如下这里写图片描述

  1. 内容类型(8位):
    封装的高层协议
    1) 握手协议(handshake): 22
    2) 警告协议(alert): 21
    3) 改变密码格式协议(change_cipher_spec): 20
    4) 应用数据协议(application_data): 23
  2. 主要版本(8位):
    使用的SSL主要版本,目前的SSL版本是SSL v3,所以这个字段的值只有3这个值
  3. 次要版本(8位):
    使用的SSL次要版本。对于SSL v3.0,值为0。
  4. 数据包长度(16位):
    1) 明文数据包:
    这个字段表示的是明文数据以字节为单位的长度
    2) 压缩数据包
    这个字段表示的是压缩数据以字节为单位的长度
    3) 加密数据包
    这个字段表示的是加密数据以字节为单位的长度
  5. 记录数据
    这个区块封装了上层协议的数据
    1) 明文数据包:
    opaque fragment[SSLPlaintext.length];
    2) 压缩数据包
    opaque fragment[SSLCompressed.length];
    3) 加密数据包
    3.1) 流式(stream)加密: GenericStreamCipher
    3.1.1) opaque content[SSLCompressed.length];
    3.1.2) opaque MAC[CipherSpec.hash_size];
    3.2) 分组(block)加密: GenericBlockCipher
    3.2.1) opaque content[SSLCompressed.length];
    3.2.2) opaque MAC[CipherSpec.hash_size];
    3.2.3) uint8 padding[GenericBlockCipher.padding_length];
    3.2.4) uint8 padding_length;
  6. MAC(0、16、20位)

转载自:http://www.cnblogs.com/LittleHann/p/3733469.html?utm_source=tuicool&utm_medium=referral

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值