SSL协议体系结构
原理及应⽤(1)SSL协议体系结构
SSL(Secure Sockets Layer ,安全套接层),是为⽹络通信提供安全及数据完整性的⼀种安全协议。由Netscape研发,⽤以保障在Internet上数据传输的安全,利⽤数据加密(Encryption)技术,确保数据在⽹络上的传输过程中不会被截取及窃听。
当前⼏乎所有浏览器都⽀持SSL,但是⽀持的版本有所不同。从图8-1中可以看到,IE同时⽀持SSL 2.0和SSL 3.0两个版本。
图8-1 IE⽀持的SSL版本
事实上各位读者已经明⽩了SSL的⼯作原理,回顾我前⾯博客讲到的公钥加密的通信原理,⽽SSL使⽤的
就是公钥加密系统。现在完全可以构想基于SSL的数据通信流程。前⾯说过,SSL是⼀种协议,本节重点在于协议本⾝和它是如何⼯作在各种协议之间来提供安全通信的。
SSL协议位于TCP/IP协议模型的⽹络层和应⽤层之间,使⽤TCP来提供⼀种可靠的端到端的安全服务,它使客户/服务器应⽤之间的通信不被攻击窃听,并且始终对服务器进⾏认证,还可以选择对客户进⾏认证。SSL协议在应⽤层通信之前就已经完成加密算法、通信密钥的协商,以及服务器认证⼯作,在此之后,应⽤层协议所传送的数据都被加密。
SSL协议体系结构如图8-2所⽰。
图8-2 SSL协议体系结构
从体系结构图可以看出,SSL协议可分为两层:
q SSL记录协议(SSL Record Protocol):建⽴在可靠的传输协议(如TCP)之上,为⾼层协议提供数据封装、压缩、加密等基本功能的⽀持。
q SSL握⼿协议(SSL Handshake Protocol):建⽴在SSL记录协议之上,⽤于在实际的数据传输开始
前,通讯双⽅进⾏⾝份认证、协商加密算法、交换加密密钥等。SSL协议实际上是SSL握⼿协议、SSL修改密⽂协议、SSL警告协议和SSL记录协议组成的⼀个协议族。下⾯分别进⾏介绍。
SSL记录协议
SSL记录协议为SSL连接提供两种服务:机密性和报⽂完整性。
在SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和记录数据(长度不为0)组成的。所有的SSL通信都使⽤SSL记录层,记录协议封装上层的握⼿协议、报警协议、修改密⽂协议。SSL记录协议包括记录头和记录数据格式的规定。
SSL记录协议定义了要传输数据的格式,它位于⼀些可靠的传输协议之上(如TCP),⽤于各种更⾼层协议的封装。主要完成分组和组合、压缩和解压缩,以及消息认证和加密等。
SSL记录协议主要操作流程如图8-3所⽰。
图8-3 SSL记录协议的操作流程
图中的五个操作简单介绍如下:
1)每个上层应⽤数据被分成214字节或更⼩的数据块。记录中包含类型、版本号、长度和数据字段。
2)压缩是可选的,并且是⽆损压缩,压缩后内容长度的增加不能超过1024字节。
3)在压缩数据上计算消息认证MAC。
4)对压缩数据及MAC进⾏加密。
5)增加SSL记录。
SSL记录协议字段的结构如图8-4所⽰。
图8-4 SSL记录协议字段的结构
如图8-4 SSL记录协议字段结构主要由内容类型、主要版本、次要版本、压缩长度组成,简介如下:
1) 内容类型(8位):封装的⾼层协议。
2) 主要版本(8位):使⽤的SSL主要版本。对于SSL v3已经定义的内容类型是握⼿协议、警告协议、改变密码格式协议和应⽤数据协议。
3) 次要版本(8位):使⽤的SSL次要版本。对于SSL v3.0,值为0。
4) 压缩长度(16位):明⽂数据(如果选⽤压缩则是压缩数据)以字节为单位的长度。
说明 已经定义的内容类型是握⼿协议、警告协议、修改密⽂协议。
SSL报警协议
SSL报警协议是⽤来为对等实体传递SSL的相关警告。如果在通信过程中某⼀⽅发现任何异常,就需要给对⽅发送⼀条警⽰消息通告。警⽰消息有两种:
q Fatal错误,如传递数据过程中发现错误的MAC,双⽅就需要⽴即中断会话,同时消除⾃⼰缓冲区相应的会话记录。
q Warning消息,这种情况,通信双⽅通常都只是记录⽇志,⽽对通信过程不造成任何影响。SSL握⼿协
ssl协议全称议可以使得服务器和客户能够相互鉴别对⽅,协商具体的加密算法和MAC算法以及保密密钥,⽤来保护在SSL记录中发送的数据。
SSL修改密⽂协议
为了保障SSL传输过程的安全性,客户端和服务器双⽅应该每隔⼀段时间改变加密规范。所以有了SSL修改密⽂协议。SSL修改密⽂协议是3个⾼层的特定协议之⼀,也是其中最简单的⼀个。在客服端和服务器完成握⼿协议之后,它需要向对⽅发送相关消息(该消息只包含⼀个值为1的单字节),通知对⽅随后的数据将⽤刚刚协商的密码规范算法和关联的密钥处理,并负责协调本⽅模块按照协商的算法和密钥⼯作。
SSL握⼿协议
SSL握⼿协议被封装在记录协议中,该协议允许服务器与客户机在应⽤程序传输和接收数据之前互相认证、协商加密算法和密钥。在初次建⽴SSL连接时,服务器与客户机交换⼀系列消息。
这些消息交换能够实现如下操作:
q 客户机认证服务器
q 允许客户机与服务器选择双⽅都⽀持的密码算法
q 可选择的服务器认证客户
q 使⽤公钥加密技术⽣成共享密钥
q 建⽴加密SSL连接
SSL握⼿协议报⽂头包括三个字段:
q 类型(1字节):该字段指明使⽤的SSL握⼿协议报⽂类型。
q 长度(3字节):以字节为单位的报⽂长度。
q 内容(≥1字节):使⽤的报⽂的有关参数。
SSL握⼿协议的报⽂类型如表8-1所⽰。
表8-1 SSL握⼿协议报⽂类型
报⽂类型参数
hello_request空
client_hello版本、随机数、会话ID、密⽂族、压缩⽅法server_hello版本、随机数、会话ID、密⽂族、压缩⽅法certificate x.509V3证书链
server_key_exchange参数、签名
certificate_request类型、授权
server_done空
certificate_verify签名
client_key_exchange参数、签名
finished Hash值
SSL握⼿协议过程如图8-5所⽰。
图8-5 SSL握⼿协议的过程(带*的传输是可选的,或者与站点相关的,并不总是发送的报⽂)现在看图8-5,分步说明SSL握⼿协议的全过程:
步骤1 建⽴安全能⼒。
客户机向服务器发送client_hello报⽂,服务器向客户机回应server_hello报⽂。建⽴的安全属性包括:协议版本、会话ID、密⽂族、压缩⽅法,同时⽣成并交换⽤于防⽌重放攻击的随机数。密⽂族参数包括密钥交换⽅法(Deffie-Hellman密钥交换算法、基于RSA的密钥交换和另⼀种实现在Fortezza chip上的密钥交换)、加密算法(DES、RC4、RC2、3DES等)、MAC算法(MD5或SHA-1)、加密类型(流或分组)等内容。
步骤2 认证服务器和密钥交换。
在hello报⽂之后,如果服务器需要被认证,服务器将发送其证书。如果需要,服务器还要发送server_key_exchange;然后,服务器可以向客户发送certificate_request请求证书。服务器总是发送server_hello_done报⽂,指⽰服务器的hello阶段结束。
步骤3 认证客户和密钥交换。
客户⼀旦收到服务器的server_hello_done报⽂,客户将检查服务器证书的合法性(如果服务器要求),
如果服务器向客户请求了证书,客户必须发送客户证书,然后发送client_key_exchange报⽂,报⽂的内容依赖于client_hello与server_hello定义的密钥交换的类型。最后,客户可能发送client_verify 报⽂来校验客户发送的证书,这个报⽂只能在具有签名作⽤的客户证书之后发送。
步骤4 结束。
客户发送change_cipher_spec报⽂并将挂起的CipherSpec复制到当前的CipherSpec。这个报⽂使⽤的是修改密⽂协议。然后,客户在新的算法、对称密钥和MAC秘密之下⽴即发送finished报⽂。finished报⽂验证密钥交换和鉴别过程是成功的。服务器对这两个报⽂响应,发送⾃⼰的change_cipher_spec报⽂、finished报⽂。握⼿结束,客户与服务器可以发送应⽤层数据了。
当客户从服务器端传送的证书中获得相关信息时,需要检查以下内容来完成对服务器的认证:
q 时间是否在证书的合法期限内;
q 签发证书的机关是否客户端信任的;
q 签发证书的公钥是否符合签发者的数字签名;
q 证书中的服务器域名是否符合服务器⾃⼰真正的域名。
服务器被验证成功后,客户继续进⾏握⼿过程。
同样地,服务器从客户传送的证书中获得相关信息认证客户的⾝份,需要检查:
q ⽤户的公钥是否符合⽤户的数字签名;
q 时间是否在证书的合法期限内;
q 签发证书的机关是否服务器信任的;
q ⽤户的证书是否被列在服务器的LDAP⾥⽤户的信息中;
q 得到验证的⽤户是否仍然有权限访问请求的服务器资源。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论