面试题解析系列:SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

  1. SSL协议格式
    SSL(Secure socket Layer 安全套接层协议)指使用公钥和私钥技术组合的安全网络通讯协议。SSL协议是网景公司(Netscape)推出的基于WEB应用的安全协议,SSL协议指定了一种在应用程序协议(如Http、Telenet、NMTP和FTP等)和TCP/IP协议之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,主要用于提高应用程序之间数据的安全性,对传送的数据进行加密和隐藏,确保数据在传送中不被改变,即确保数据的完整性。
    SSL 以对称密码技术和公开密码技术相结合,可以实现如下三个通信目标:
  2. 秘密性: SSL客户机和服务器之间传送的数据都经过了加密处理,网络中的非法窃听者所获取的信息都将是无意义的密文信息
  3. 完整性: SSL利用密码算法和散列(HASH)函数,通过对传输信息特征值的提取来保证信息的完整性,确保要传输的信息全部到达目的地,可以避免服务器和客户机之间的信息受到破坏。
  4. 认证性:利用证书技术和可信的第三方认证,可以让客户机和服务器相互识别对方的身份。为了验证证书持有者是其合法用户(而不是冒名用户),SSL要求证书持有者在握手时相互交换数字证
    书,通过验证来保证对方身份的合法性。

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

  1. 加密算法
  2. 通信密钥的协商
  3. 服务器认证工作
    在这里插入图片描述

在此之后,应用层协议所传送的数据都被加密。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记录数据包格式如下
    在这里插入图片描述

  2. 内容类型(8位):
    封装的高层协议

    1. 握手协议(handshake): 22
    2. 警告协议(alert): 21
    3. 改变密码格式协议(change_cipher_spec): 20
    4. 应用数据协议(application_data): 23
  3. 主要版本(8位):
    使用的SSL主要版本,目前的SSL版本是SSL v3,所以这个字段的值只有3这个值

  4. 次要版本(8位):
    使用的SSL次要版本。对于SSL v3.0,值为0。

  5. 数据包长度(16位):

    1. 明文数据包:
      这个字段表示的是明文数据以字节为单位的长度
    2. 压缩数据包
      这个字段表示的是压缩数据以字节为单位的长度
    3. 加密数据包
      这个字段表示的是加密数据以字节为单位的长度
  6. 记录数据
    这个区块封装了上层协议的数据

    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;
  7. MAC(0、16、20位)
    0x2: SSL握手协议
    握手协议是客户机和服务器用SSL连接通信时使用的"第一个"子协议,握手协议包括客户机与服务器之间的一系列消息。
    SSL握手协议被封装在记录协议中,该协议允许服务器与客户机在应用程序传输和接收数据之前互相认证、协商加密算法和密钥。在初次建立SSL连接时,服务器与客户机交换一系列消息。
    这些消息交换能够实现如下操作:

  8. 客户机认证服务器 2. 协商客户机与服务器选择双方都支持的密码算法 3. 可选择的服务器认证客户 4. 使用公钥加密技术生成共享密钥 5. 建立加密SSL连接

SSL握手协议报文格式如下

在这里插入图片描述

  1. 类型(Type)(1字节):
    该字段指明使用的SSL握手协议报文类型
    1. hello_request:
    2. client_hello:
    3. server_hello:
    4. certificate:
    5. server_key_exchange:
    6. certificate_request:
    7. server_done:
    8. certificate_verify:
    9. client_key_exchange:
    10. finished:
  2. 长度(Length)(3字节):
    以字节为单位的报文长度。
  3. 内容(Content)(≥1字节):
    对应报文类型的的实际内容、参数
      1) hello_request: 空
    2) client_hello:
      2.1) 版本(ProtocolVersion)
      代表客户端可以支持的SSL最高版本号
      2.1.1) 主版本: 3
      2.1.2) 次版本: 0
      2.2) 随机数(Random)
      客户端产生的一个用于生成主密钥(master key)的32字节的随机数(主密钥由客户端和服务端的随机数共同生成)
      2.2.1) uint32 gmt_unix_time;
      2.2.2) opaque random_bytes[28];
      4+28=32字节
      2.3) 会话ID: opaque SessionID<0…32>;
      2.4) 密文族(加密套件):
      一个客户端可以支持的密码套件列表。这个列表会根据使用优先顺序排列,每个密码套件都指定了"密钥交换算法(Deffie-Hellman密钥交换算法、基于RSA的密钥交换和另一种实
    现在Fortezza chip上的密钥交换)"、“加密算法(DES、RC4、RC2、3DES等)”、“认证算法(MD5或SHA-1)”、“加密方式(流、分组)”
      2.4.1) CipherSuite SSL_RSA_WITH_NULL_MD5
      2.4.2) CipherSuite SSL_RSA_WITH_NULL_SHA
      2.4.3) CipherSuite SSL_RSA_EXPORT_WITH_RC4_4
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值