SSL和TLS-SSL Protocol介绍
SSL协议是客户端/服务器协议,向双方提供基本的安全服务:
- 认证(端和数据来源认证)
- 连接机密性服务
- 连接完整性服务(不能恢复)
尽管SSL协议使用公钥(public key)加密,它不提供源(origin)和完整性的不可否认(nonrepudiation)服务。
SSL协议是sockets-oriented,意味着通过网络socket发送或者接收的数据都是以相同的办法加密。
SSL是介于传输层和应用层之间的中间层协议:
-
通信方之间建立的是安全的连接
-
使用这个连接安全地传输高级协议数据。数据被分成可管理的块(fragments),分别处理各个fragment。每个块可以是压缩的、认证的、加密的、有header。每个块以不同的SSL记录发送。
-
SSL handshake protocol:是SSL的核心子协议。用来建立安全的连接。它允许通信双方互相认证,协商加密套件(cipher suite)和压缩方法。
-
SSL change cipher spec protocol:允许通信双方发信号更改密码规格(修改数据的加密策略和办法)当握手协议用来协商安全连接的参数时,本协议用来把参数放到地方,使参数生效
-
SSL alert protocol:允许双方发送信号,说明潜在的问题,发送相关告警消息
-
SSL application data protocol:它和SSL record protocol一起,安全地传输应用数据。
SSL协议自己决定TCP段(segment)内一个SSL记录的开始和结束,以及包含在一个SSL记录中的每个SSL消息(message)的开始和结束。因此,SSL协议采用多个长度属性。每个SSL记录有一个长度属性,记录整个记录的长度,每个SSL消息也包含记录它的长度的属性。这样,多个SSL消息可以打包到一个SSL记录内。
SSL协议的主要优点是和应用层协议无关,也就是说任何基于TCP协议的应用层协议都可以用SSL实现基本的安全服务。为了适应不支持SSL的客户端,服务器应该准备接受安全的和不安全的协议。一般有两种策略:
- 使用不同的端口。为安全的版本和不安全的版本各准备一个端口。就是说建议服务器监听一个普通端口,一个安全端口,连接到安全端口的自动使用SSL
- 向上(upward)的协商策略,使用一个版本支持两种协议。一端通过一个消息,说明愿意升级到SSL。另一端统一以后,调用SSL,建立安全通道
RFC 2817支持升级策略。RFC 2818使用两个端口。HTTP一般都使用不同端口的方案(HTTP over SSL,简称HTTPS)。
SSL协议很简单,和IPsec/IKE、TLS这些协议可以完美结合。
SSL协议以块为单位,一个块就是一个字节。使用big endian格式。
一个或者几个SSL连接关联一个SSL session。连接用来传输数据。数据被加密也可能被压缩。
一个SSL session在SSL握手之后建立,定义了一系列的加密参数。SSL session主要用来避免,每个连接单独的新加密参数的协商。
一对实体间,可能同时存在多个SSL连接。原则上,可以多个session共存,但很少这样使用。
SSL session和连接是有状态的,客户端和服务器都应该保存一些状态信息。SSL握手协议建立和协调客户端和服务器侧的状态,
从而,允许SSL状态机协调一致。有两个状态,一个是当前状态,一个是pending状态。另外还有读写状态。所以,每一个都需要管理四个状态。
下面的图展示了在SSL握手期间,当发送或者接收了一个ChangeCipherSpec消息时的状态变化。
- 如果一个实体发送了ChangeCipherSpec消息,它从pending write状态到current write状态。read状态保持不变。
- 如果一个实体接收了ChangeCipherSpec消息,它从pending read状态到current read状态。write状态保持不变。
当SSL握手协商完成以后,客户端和服务器交换ChangeCipherSpec消息,于是,pending状态改变到current状态。意味着他们现在能使用新约定的加密(和其他)参数。然后,FINISHED消息保护新参数。对于每个session和连接,SSL状态机必须保护一些信息元素。
SSL Session State Elements
名称 | 描述 |
---|---|
session identifier | 服务器指定的字节序列,标识活动的或者可恢复的session。最长32个字节 |
peer certificate | X.509v3证书 |
compression method | 数据压缩算法(优先于加密) |
cipher spec | 数据加密和MAC算法 |
master secret | 客户端和服务器共享的48字节的secret |
is resumable | session是否可恢复。表示是否可用于新连接 |
SSL Connection State Elements
名称 | 描述 |
---|
server and client random 服务器和客户端为每个连接选择的字节序列
server write MAC key 服务器写的数据,在MAC操作时的secret
client write MAC key 客户端写的数据,在MAC操作时的secret
server write key 服务器加密、客户端解密的key
client write key 客户端加密、服务器解密的key
initialization vectors 如果使用CBC模式的块cipher做数据加密,每个key都要维护一个IV。这个属性首先由SSL握手协议初始化。然后,每个SSL记录的最终cipher文本块作为下一个记录的IV
sequence numbers SSL消息认证的顺序号。客户端和服务器要维护每个连接上的消息的顺序号。顺序号64位长。当发送或者接收到ChangeCipherSpec消息,顺序号复位为0