网络安全协议
TCP/IP协议族在设计时并没有考虑到安全性问题,信息在传输过程中的安全性无法保证,接收方无法确认发送方的身份,也无法判定接收到的信息是否与原始信息相同。
因此,网络安全研究人员在链路层、网络层和传输层开发了相应的安全补充协议,期望在各个层次上分别达到保密性、完整性和不可抵赖性的安全目标。802.1X和EAP协议用于在链路层上实现发送方身份认证,IPSec和SSL分别在网络层和传输层利用密码技术实现了三个基本安全目标,802.11i协议族定义无线局域网WLAN的加密和完整性检测机制。
SSL协议
安全套接层协议(Secure Socket Layer,SSL)指定了一种在应用层协议和TCP/IP协议之间提供数据安全性的机制,为TCP/IP连接提供保密性、完整性、服务器认证和可选的客户机认证,主要用于实现Web服务器和浏览器之间的安全通信。
SSL协议栈的组成:
SSL握手协议 |
SSL密码变更协议 |
SSL报警协议 |
HTTP |
SSL记录协议 |
|||
TCP |
|||
IP |
图 1-1 SSL协议栈的组成
- SSL记录协议为应用层协议提供基本的安全服务,HTTP一般在SSL的记录协议的上层实现。
- SSL握手协议用于在客户机和服务器之间建立安全连接前,预先建立一个连接双方的安全通道,并能通过特定的加密算法互相鉴别。
- SSL更改密码规范协议是一个比较简单的协议,只包含一条长度为1字节的消息,用于设置当前状态和当前密钥组,表明相应的加密策略已经设置。
- SSL报警协议用于握手协议或数据加密等操作出错时,向对方传递报警信息或者终止当前连接,它的数据有两个字节,即报警级别和报警代码,报警级别分为“warning”和“fatal”两种,fatal类型的报警会导致连接立即终止。
SSL记录协议
一个记录由两部分组成,即记录头部和数据:
内容类型 |
主版本号 |
次版本号 |
数据长度 |
|
压缩后数据 |
加密 |
|||
MAC |
图 1-2 SSL记录协议格式
(1)内容类型:8比特,表示上层协议类型,如更改密码规范协议是20,报警协议是21,握手协议是22。
(2)协议版本:16比特,表名SSL版本号,高8位是主版本号,低8位是次版本号。
(3)数据长度:如果经过压缩,则是压缩后的长度。
SSL握手协议
SSL握手协议是SSL中最复杂的协议,它协商的结果是SSL记录协议处理的基础,它的内容分为三部分:数据类型(表1-1)、数据长度(3字节)和数据内容(与类型有关的参数)。
在收发双方通信之前,首先使用握手协议协商各种参数,包括协议版本、加密算法、相关密钥、MAC算法,然后进行身份认证,最后客户生成一个随机数作为预主密钥,用服务器的公钥加密后,发给服务器,此后,所有的数据都可以使用该预主密钥按照密钥交换算法产生会话密钥进行加密,保证安全性。
数据类型 |
参数 |
hello_request |
无 |
client_hello |
版本号、随机数、会话ID、密码参数、压缩方法 |
server_hello |
|
certificate |
X. 509 v3 证书链 |
server_key_exchange |
参数,签名 |
certificate_request |
类型,CA |
server_hello_done |
无 |
certificate_verify |
待验证的签名 |
client_key_exchange |
参数,签名 |
finished |
散列码 |
表格 1-1 握手协议的数据类型及参数
握手协议过程分为三个阶段:
1. hello阶段
主要工作是协商版本号、会话ID、密码组、压缩算法和交换随机数等。
(1)client_hello:客户初始化该消息,将客户支持的建立安全通道的参数发送给服务器进行选择。
(2)server_hello:服务器收到client_hello后可以回答一个报警报文表示握手失败,或者回答server_hello,将服务器决定选择的参数组合传送回客户,其中包括服务器产生的新随机数。
2. 密钥协商阶段
主要工作是发送服务器证书,请求客户证书(可选),如果客户被要求证书,则发送。
(1)certificate:服务器发送自己的证书给客户,表明身份。客户检查证书的签名并获得服务器的公钥,随后使用该公钥加密随机产生的预主密钥。
(2)server_key_exchange:当hello阶段协商的算法仅仅使用certificate的信息无法进行密钥交换时,使用该报文发送密钥交换所必需的其他信息。
(3)server_hello_done:服务器表明server_hello结束,等待客户响应。
(4)client_key_exchange:客户用服务器的公钥加密一个随机生成的预主密钥,然后发送给服务器,服务器收到后,用自己的私钥解开,然后根据hello阶段协商的算法,各自计算主密钥,最后产生通信使用的会话密钥。
3. finished阶段
主要工作是改变密码组,完成握手。
(1)密码规范变更报文:表示记录协议的加密算法和认证方式的改变,随后将启用新的密钥。
(2)finished:双方互相验证收到的finished类型的报文是否正确无误,从而确定对方已经生成正确的会话密钥。此时握手协议完成,双方可以用新的会话密钥安全传输数据。
记一次SSL握手协议过程
图 1‑1 SSL协议握手过程
① 客户向服务器(www.baidu.com)发送Client Hello报文;
② 服务器向客户发送Server Hello报文,同时选择了14种参数中的一种参数;
③ 然后服务器通过Certificate报文和Server Key Exchange报文向客户发送服务器证书及其他密钥交换所必需的信息;
④ 发送完毕后用Server Hello Done报文表明Server Hello结束,等待客户响应;
⑤ 客户用Client Key Exchange报文发送用公钥加密的预主密钥;
⑥ 服务器发送密码规范变更报文和finished报文改变密码组,完成握手;
⑦ 至此,握手完成,可以注意到接下来的数据都是加密传输的。