SSL 协议
SSL 是用于安全传输数据的一种通信协议。它采用公钥加密技术、对称密钥加密技术等保护两个应用之间的信息传输的机密性和完整性。但是,SSL 也有一个不足,就是它本身不能保证传输信息的不可否认性。
SSL 协议包括服务器认证、客户认证、SSL 链路上的数据完整性、SSL 链路上的数据保密性等几个方面,通过在浏览器和 Web 服务器之间建立一条安全的通道来保证 Internet数据传递的安全。目前,利用公钥加密的 SSL 技术,已经成为 Internet 上进行保密通信的工业标准。SSL 协议常常用于增强 Web 服务的安全性。
在 TCP/IP 协议中,SSL 协议建立在传输层即 TCP 之上、应用层之下。SSL 协议有一个突出的优点,就是它与应用层协议相独立,高层的应用层协议如 HTTP 等可以透明地建立在 SSL 协议之上进行工作。
通过 SSL 协议建立的传输通道具有如下的基本安全性:
(1)通道是保密的,经过握手确定密钥之后,所有的消息被加密。SSL 协议在应用层协议工作之前就已经完成了加密算法、密钥的协商、服务器认证等工作,而此后的所有应用层所传送的数据都是经过加密的,因此 SSL 协议具有很好的保密性。
(2)通道是被认证的,通信中的服务器端总是被认证,客户端可选认证。在基于 SSL 协议的通信过程中,服务器端认证是必须进行的,所以,即使在一次会话过程中不进行客户端认证,该会话的确认性也能够有很好的保证。
(3)通道是可靠的,用 MAC 对传送的消息进行完整性检查,保证通道上数据的完整性。基于 SSL 协议的通信过程,因为传递的消息中包括消息完整性检查数据(即 MAC 数据),因此,可以保证该通信是可靠的。
SSL 协议由 SSL 记录协议、SSL 握手协议、SSL 密码变更说明协议、SSL 警告协议等组成。
![9522cbf42f28a2519e5bb6544941f30f.png](https://i-blog.csdnimg.cn/blog_migrate/b7a93c3fc27483066b305cd62c7caa61.jpeg)
1.SSL 记录协议
在 SSL 记录协议中,所有要传输的数据都被封装在记录中,记录是由纪录头和长度不为0 的记录数据组成的。所有的 SSL 通信,包括握手消息、安全空白记录、应用数据等都需要使用 SSL 记录。
2.SSL 协议记录头格式
SSL 协议记录头包括的数据有记录头长度、记录数据长度、记录数据中是否有粘贴数据等。SSL 协议记录头长度既可以是 2 字节、也可以是 3 字节长。当记录头的最高位为 1 时,表示不含有粘贴数据,记录头长度为 2 字节,记录数据最大长度为 32 767 字节;当记录头的最高位为 0 时,则含有粘贴数据,记录头长度为 3 字节,记录数据最大长度为 16 383字节。当记录头的最高位为 0 时,次高位有特殊的含义。当次高位为 1 时,表示所传输的记录是普通记录;当次高位为 0 时,表示所传输的记录是安全空白记录。
SSL 协议记录头格式如图所示。
![1bd6b2959fdfe7777121153a7429101c.png](https://i-blog.csdnimg.cn/blog_migrate/1ce14b5aac3bac5e0a35f0ebdded526a.jpeg)
记录头中数据长度编码不包括数据头所占用的字节长度。记录头长度为 2 字节时记录长度的计算方法为:记录长度=(( byte[0]&0x7f) <<8))|byte[1]
记录头长度为 3 字节时记录长度的计算方法为:记录长度=(( byte[0]&0x3f) <<8))|byte[1]
以上计算式中,byte[0]、byte[1]也分别表示所传输的第一、二个字节。
另外,粘贴数据的长度为传输的第三个字节。
3.SSL 记录数据的格式
SSL 记录数据包含三个部分:MAC 数据和实际数据和粘贴数据。
MAC 数据用于数据完整性检查。计算 MAC 所用的散列函数由握手协议中的消息确定。
若使用 MD5 算法,则 MAC 数据长度是 16 字节。MAC 数据的产生方式为:
MAC 数据= HASH(密钥、实际数据、粘贴数据、序号)其中,当会话的客户端发送数据时,密钥是客户的写密钥(服务器用读密钥来验证 MAC数据);而当会话的客户端接收数据时,密钥是客户的读密钥(服务器用写密钥来验证 MAC数据)。序号是一个可以被发送和接收双方递增的计数器。每个通信方都会建立一个计数器,分别属于发送者和接收者。计数器有 32 位,计数值循环使用,每发送一个记录计数值递增一次,序号的初始值为 0。
4.SSL 握手协议
SSL 握手协议建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。SSL 握手的过程可以分为两个阶段,第一阶段用于建立秘密的通信信道,第二阶段用于客户验证。
在 SSL 协议中,同时使用了对称密钥加密算法和公钥加密算法,这是为了综合利用对称密钥加密算法的高速度和公钥加密算法的安全性的优点。SSL 协议使用公钥加密算法使服务器端身份在客户端得到验证,并且传递用于会话中对数据加密的对称密钥。然后再利用对称密钥在通信过程中对收到和发送的数据进行比较快速的加密,从而减小系统开销,保证通信效率。
SSL 支持各种加密算法。在“握手”过程中,使用 RSA 公开密钥系统。密钥交换后,可以使用多种密码,例如,RC2、RC4、IDEA、DES、3DES 及 MD5 信息摘要算法等。
SSL 协议可以非常有效地保护通信过程。但是,如果某种攻击是利用 SSL 协议通信进行的,那么,这种攻击也会受到 SSL 协议的保护,从而使得攻击更加隐蔽,难于被发现。
当然,这种攻击也能够很好地穿透防火墙、躲过入侵检测系统的检查。
另外,SSL 在通信过程中,要进行许多加密、解密的操作,这些计算的复杂性随着密码的强度不同而不同,但是高强度的计算会增加服务器负载、增加网络带宽,从而使服务器性能下降,吞吐量也下降。