SSL记录协议
什么是SSL记录协议
  SSL记录协议是通过将分割成⼀系列的⽚段并加以传输来⼯作的,其中的每个⽚段都单独进⾏保护和传输。在传输数据⽚段之前,需要计算数据的MAC以保证数据的完整性。数据⽚段和MAC⼀起被加密并与头信息组成记录,记录是实际传输的内容。
SSL记录协议的两种服务
  SSL记录协议为每⼀个SSL连接提供以下两种服务。
  (1)机密性(Confidentiality):SSL记录协议会协助双⽅产⽣⼀把共有的密钥,利⽤这把密钥来对SSL所传送的数据做传统式加密。
  (2)消息完整性(Message Integrity):SSL记录协议会协助双⽅产⽣另⼀把共有的密钥,利⽤这把密钥来计算出消息认证码。
  下图展⽰了SSL记录协议⼤致的操作流程。记录协议接收到应⽤程序所要传送的后,会将消息内的数据切成容易管理的⼩区块(分⽚),然后选择是否对这些区块作压缩,再加上此区块的消息认证码。接着将数
据区块与MAC⼀起做加密处理,加上SSL记录头后通过TCP传送出去。接收数据的那⼀⽅则以解释、核查、解压缩,及的步骤将消息的内容还原,传送给上层使⽤者。
  第⼀个步骤是分⽚(Fragmentation)。每⼀个上层想要通过SSL传送的消息都会被切割成最多214B(或者是16364B)⼤⼩的分⽚,接着,可以选择是否执⾏压缩(Compression)的步骤。压缩的过程中,必须是⽆损失(Lossless)压缩,也就是说解压缩后能够得到原本完整的消息。除此之外,经过压缩后的内容长度不能超过原有长度1024字节以上(当然,我们希望压缩后的数据能够更⼩,⽽不是增多。但对于有些长度⾮常⼩的分⽚来说,可能因为压缩算法格式上的要求,压缩过后的结果会⽐原来数据还长)。在SSLv3(以及TLS的现有版本),并没有指定压缩算法,所以预设的加算法是null。
  接下来的处理步骤为计算压缩数据的消息认证码。为了达到这个⽬的,必须使⽤⼀把双⽅共有的密钥。消息认证码的计算过程定义如下:
(MAC_write_secrte||pad_1||seq_mum||SSLCompressed.type||SSLCompressed.length||SSLCompressed.fragment),其中,各符号和参数的意义如下。
  (1)||:表⽰串接。
  (2)MAC_write_secrte:共有的密钥。
  (3)Hash:使⽤到密码的;MD5或者SHA-1。
  (4)pad_1:若是使⽤MD5,则为0x36(00110110)字节重复48次的384位分⽚,若是⽤SHA-1,则为0x36重复40次的320位分⽚。
  (5)pad_2:若是使⽤MD5,则为0x5C(01010110)字节重复48次的384位分⽚,若是⽤SHA-1,则为0x36重复40次的320位分⽚。
  (6)seq_mum:这个消息的序列号码。
  (7)SSLCompressed.type:⽤来处理这个分⽚的上层协议。
  (8)SSLCompressed.length:分⽚经过压缩过后的长度。
ssl协议全称  (9)SSLCompressed.fragment:经过压缩后的分⽚(假如没有经过压缩这个步骤,则代表明⽂分⽚)。
  接着,压缩过后的数据会连同MAC⼀起做对称加密。加密后的数据长度最多只能⽐加密前多1024B,因此,连同压缩以及加密的过程处理完后,整个数据块长度不会超过(214+2048)B。
  SSL记录协议最后的步骤便是准备⼀个记录头,这个记录头包含以下的字段。
  (1)数据类型(Content type),8位:⽤来处理这个分⽚的上层协议。
  (2)主要版本号(Major Version),8位:所使⽤的。协议的主要版本,对于SSI。v3协议来说,这个字段值为3。
  (3)次要版本号(Minor Version),8位:表⽰使⽤的次要版本,对于SSLv3协议来说,这个字段值为0。
  (4)压缩后数据长度(Compressed length),16位:这个明⽂分⽚的长度(假如此分⽚已经过压缩,则为压缩后的长度)。最⼤值为(214+2048)B。
  已定义的数据类型包含Change_cipher_spec、alert、handshake,以及application_data。前三种数据类型为SSL所定义的协议。请注意,上层各种使⽤SSI。的应⽤程序对于SSL来说并没有什么差别,因为SSI。⽆法了解这些应⽤程序所产⽣的数据的意义。