竭诚为您提供优质文档/双击可除
ssl协议报文
篇一:ssl原理详解
ssl工作原理
第一章概要
一、什么是ssl?
ssl采用tcp作为传输协议提供数据的可靠传送和接收。ssl工作在socket层上,因此独立于更高层应用,可为更高层协议,如telnet、Ftp和http提供安全业务。ssl提供的安全业务和tcp层一样,采用了公开密钥和私人密钥两种加密体制对web服务器和客户机(选项)的通信提供保密性、数据完整性和认证。在建立连接过程中采用公开密钥,在会话过程中使用私人密钥。加密的类型和强度则在两端之间建立连接的过程中判断决定。在所有情况下,服务器通过以下方法向客户机证实自身:给出包含公开密钥的、可验证的证明;演示它能对用此公开密钥加密的报文进行解密。
为了支持客户机,每个客户机都要拥有一对密钥,这要
求在internet上通过netscape分配。由于internet中的服务器数远少于客户机数,因此能否处理签字及密钥管理的业务量是很重要的,并且与客户联系比给商家以同样保证更重要。
二、ssl提供的服务
ssl协议提供的服务可以归纳为如下3个方面。
(1)用户和服务器的合法性认证
使得用户和服务器能够确信数据将被发送到正确的客
户机和服务器上。客户机和服务器都有各自的识别号,由公开密钥编排。为了验证用户,安全套接层协议要求在握手交换数据中做数字认证,以此来确保用户的合法性。
(2)加密数据以隐藏被传送的数据
安全套接层协议采用的加密技术既有对称密钥,也有公开密钥。具体来说,就是客户机与服务器交换数据之前,先交换ssl初始握手信息。在ssl握手信息中采用了各种加密技术,以保证其机密性和数据的完整性,并且经数字证书鉴别,这样就可以防止非法用户破译。
(3)维护数据的完整性
安全套接层协议采用密码杂凑函数和机密共享的方法,提供完整信息性的服务,来建立客户机与服务器之间的安全通道,使所有经过安全套接层协议处理的业务,在传输过程中都能完整、准确无误地到达目的地。
第二章ssl工作流程概述
ssl的工作分为两个阶段:握手阶段和数据传输阶段,若通信期间检测到不安全因素,比如握手时候发现另一端无法支持选择的协议或加密算法,或者发现数据被篡改,这时通信一方会发送警告消息,不安全因素影响比较大两端之间的通信就会终止,必须重新协商建立连接。
ssl协议分成三个子协议:handshake(握
手)changecipherspec(更改密钥规格),alert(告警)。
ssl的告警协议是用来为通信对方发送一条告警消息,告警分为两个层次:fatal和warning,如果是fatal级别的如mac计算出错或协商密钥算法失败则马上断开连接,要建立连接的话需要重新握手;warning类型的消息一般只会记录日志,并不会断开连接。
具体的工作流程图如下所示:
使用协商好的密钥加密
(1)clienthello
握手阶段从客户端发送“clienthello”消息为起点。“clienthello”消息中包含了协议的版本号(protocolVersion)、会话的id(sessionid)、表明了客户端加密能力的密钥套件列表(ciphersuite)、客户端支持的压缩算法(compressionmethods)以及一个28位长的随机数(该随机数将用于所有的消
息摘要和会话密钥的生成)。
(2)serverhello
服务器端收到客户端发来的请求,在内部协商之后,确定了协议版本号、之后所要使用到的加密套件列表和压缩算法、生成一个新的会话id,并产生一个28位长的随机数。封装在“serverhello”中发送给客户端。
服务器与客户端之间的协商必须确定出一个公共密钥对,如果无法确定,则握手失败。
(3)服务器发送数字证书(servercertificates)
ssl采用x.509数字证书标准,证书中包含验证服务器身份的证书消息和服务器端的公开密钥。
(4)服务端密钥交换信息(serverkeyexchange)
这条消息本来是可选的,视不同情况而定,服务器端发送将用在密钥交换过程的信息(依据使用的密钥交换算法的不同,可能发送公钥,也可能发送一个经过签名的整数)(5)请求客户端证书消息(clientcertificateRequest)如果所用的ssl版本是3.0以上的,服务器端可以要求客户端发送数字证书,以实现对客户端的认证。消息中会包含服务端支持的证书类型和所有server端信任的证书发行机构的dn(distinguishedname)列表。
(6)serverhellodone
客户端收到这个消息,客户端会先对服务器端发送过来
的消息做如下处理:
①serverhello
客户端会先收到服务器端的“serverhello”消息,客
户端会将serverhello中的多个消息(会话id、服务器端的一个随机数、协商出ssl协议版本号以及密钥套件)放到会话缓存中。
②服务器证书消息
证书消息中包含一个证书列表和一个公开密钥,客户端取出证书列表,最上面是server的证书,最下面是ca根证书,通过一层层验证,证明服务端是可信任的。
③收到服务端密钥交换信息
客户端将保存在里面的信息存到会话缓存中。
④收到客户端证书请求消息
将消息中的证书类型列表和可信任证书发行机构列表
保存起来,在后面发送
客户端证书的时候,就根据这个列表来筛选。
⑤收到serverhellodone消息
收到消息之后,客户端就开始给server端发送回馈消息。
(7)客户发送证书消息(clientcertificates)
如果服务端要求客户端发送证书消息,客户端就按照clientcertificateRequest里的列表,发送符合要求的证书。