SSL协议相关知识简介3354.docx
引言 SSSL是一种种在客户户端和服服务器端端之间建建立安全全通道的的协议。SSL一经提提出,就就在Intternnet上得到到广泛的的应用。SSL最常用用来保护护Web的安全全。为了了保护存存有敏感感信息Web的服务务器的安安全,消消除用户户在Intternnet上数据据传输的的安全顾顾虑。OpenSSSL是一个个支持SSL认证的的服务器器它是是一个源源码开放放的自由由软件,支支持多种种操作系系统。OpeenSSSL软件的的目的是是实现一一个完整整的、健健壮的、商商业级的的开放源源码工具具,通过过强大的的加密算算法来实实现建立立在传输输层之上上的安全全性。OpeenSSSL包含一一套SSL协议的的完整接接口,应应用程序序应用它它们可以以很方便便的建立立起安全全套接层层,进而而能够通通过网络络进行安安全的数数据传输输。2 SSSL协议概概述SSL 是是Seccuree soockeet LLayeer英文缩缩写,它的中中文意思思是安全全套接层层协议,指使用用公钥和和私钥技技术组合合的安全全网络通通讯协议议。SSL协议是是网景公公司(Neetsccapee)推出的的基于 WEEB应用的的安全协协议,SSSL协议指指定了一一种在应应用程序序协议(如Htttp、Telleneet、NMTTP和FTPP等)和TCPP/IPP协议之之间提供供数据安安全性分分层的机机制,它为TCPP/IPP连接提提供数据据加密、服服务器认认证、消消息完整整性以及及可选的的客户机机认证,主要用用于提高高应用程程序之间间数据的的安全性性,对传送送的数据据进行加加密和隐隐藏,确保数数据在传传送中不不被改变变,即确保保数据的的完整性性。 SSL 以对称称密码技技术和公公开密码码技术相相结合,可可以实现现如下三三个通信信目标:(1)秘密密性: SSSL客户机机和服务务器之间间传送的的数据都都经过了了加密处处理,网络中中的非法法窃听者者所获取取的信息息都将是是无意义义的密文文信息。( 2)完完整性: SSSL利用密密码算法法和散列(HAASH)函数,通过对对传输信信息特征征值的提提取来保保证信息息的完整整性,确保要要传输的信息全部部到达目目的地,可以避避免服务务器和客客户机之之间的信信息受到到破坏。(3)认证证性:利用证证书技术术和可信信的第三三方认证证,可以让让客户机机和服务务器相互互识别对对方的身身份。为为了验证证证书持持有者是是其合法法用户(而不是是冒名用用户), SSLL要求证证书持有有者在握握手时相相互交换换数字证证书,通过验验证来保保证对方方身份的的合法性性。3 SSSL协议的的体系结结构SSL协议议位于TCPP/IPP协议模模型的网网络层和和应用层层之间,使用TCP来提供供一种可可靠的端端到端的的安全服服务,它是客客户/服务器器应用之之间的通通信不被被攻击窃窃听,并且始终终对服务务器进行行认证,还可以以选择对对客户进进行认证证。SSL协议在在应用层层通信之之前就已已经完成成加密算算法、通通信密钥钥的协商商以及服服务器认认证工作作,在此之之后,应用层层协议所所传送的的数据都都被加密密。SSL实际上上是共同同工作的的两层协协议组成成,如图1所示。从从体系结结构图可可以看出出SSL安全协协议实际际是SSL握手协协议、SSL修改密密文协议议、SSL警告协协议和SSL记录协协议组成成的一个个协议族族。 握手协议修改密 文协议报警协议 SSLL记录协协议 TCPP IP 图1 SSL体系结结构 SSLL记录协协议为SSL连接提提供了两两种服务务:一是机机密性,二是消消息完整整性。为为了实现现这两种种服务, SSSL记录协协议对接接收的数数据和被被接收的的数据工工作过程程是如何何实现的的呢? SSSL记录协协议接收收传输的的应用报报文,将数据据分片成成可管理理的块,进行数数据压缩缩(可选),应用MACC,接着利利用IDEEA、DES、3DEES或其他他加密算算法进行行数据加加密,最后增增加由内内容类型型、主要要版本、次次要版本本和压缩缩长度组组成的首首部。被被接收的的数据刚刚好与接接收数据据工作过过程相反反,依次被解密密、验证证、解压压缩和重重新装配配,然后交交给更高高级用户户。 SSLL修改密密文协议议是使用用SSL记录协协议服务务的SSL高层协协议的3个特定定协议之之一,也是其其中最简简单的一一个。协协议由单单个消息息组成,该消息息只包含含一个值值为1的单个个字节。该该消息的的唯一作作用就是是使未决决状态拷拷贝为当当前状态态,更新用用于当前前连接的的密码组组。为了了保障SSL传输过过程的安安全性,双方应应该每隔隔一段时时间改变变加密规规范。 SSLL告警协协议是用用来为对对等实体体传递SSL的相关关警告。如如果在通通信过程程中某一一方发现现任何异异常,就需要要给对方方发送一一条警示示消息通通告。警警示消息息有两种:一种是 Faatall错误,如传递递数据过过程中,发现错错误的MACC,双方就就需要立立即中断断会话,同时消消除自己己缓冲区区相应的的会话记记录;第二种种是Warrninng消息,这种情情况,通信双双方通常常都只是是记录日日志,而对通通信过程程不造成成任何影影响。SSL握手协协议可以以使得服服务器和和客户能能够相互互鉴别对对方,协商具具体的加加密算法法和MAC算法以以及保密密密钥,用来保保护在SSL记录中中发送的的数据。SSL握手手协议允允许通信信实体在在交换应应用数据据之前协协商密钥钥的算法法、加密密密钥和和对客户户端进行行认证(可可选)的的协议,为为下一步步记录协协议要使使用的密密钥信息息进行协协商,使使客户端端和服务务器建立立并保持持安全通通信的状状态信息息。SSL握手协协议是在在任何应应用程序序数据传传输之前前使用的的。SSL握手协协议包含含四个阶阶段:第一个个阶段建建立安全全能力;第二个个阶段服服务器鉴鉴别和密密钥交换换;第三个个阶段客客户鉴别别和密钥钥交换;第四个个阶段完完成握手手协议。4 SSSL协议的的实现基于OpeenSSSL的程序序可以被被分为两两个部分分:客户户机和服服务器,使使用SSL协议使使通信双双方可以以相互验验证对方方身份的的真实性性,并且且能够保保证数据据的完整整性和机机密性。建建立SSL通信的的过程如如图2所示。 图2 SSSL通信过过程 SSL通信信模型采采用标准准的C/S结构,除除了在TCP层上进进行传输输之外,与与普通的的网络通通信协议议没有太太大的区区别,基基于OpeenSSSL的程序序都要遵遵循以下下几个步步骤:(1 ) OpeenSSSL初始化化在使用OppenSSSL之前,必必须进行行相应的的协议初初始化工工作,这这可以通通过下面面的函数数实现:int SSSL_libbrarry_iint(voiid);(2 ) 选择会会话协议议在利用OppenSSSL开始SSL会话之之前,需需要为客客户端和和服务器器制定本本次会话话采用的的协议,目目前能够够使用的的协议包包括TLSSv1.0、SSLLv2、SSLLv3、SSLLv2/v3。需要注意的的是,客客户端和和服务器器必须使使用相互互兼容的的协议,否否则SSL会话将将无法正正常进行行。(3 ) 创建会会话环境境在OpennSSLL中创建建的SSL会话环环境称为为CTX,使用用不同的的协议会会话,其其环境也也不一样的。申申请SSL会话环环境的OpeenSSSL函数是是:SSL_CCTX *SSSL_CCTX_neww(SSSL_MMETHHOD * mmethhod);当SSL会会话环境境申请成成功后,还还要根据据实际的的需要设设置CTX的属性性,通常常的设置置是指定定SSL握手阶阶段证书书的验证证方式和和加载自自己的证证书。制制定证书书验证方方式的函函数是:int SSSL_CTXX_seet_vveriify(SSLL_CTTX *ctxx,innt mmodee,innt(*verrifyy_caallbbackk),iint(X5009_SSTORRE_CCTX *);为SSL会会话环境境加载CA证书的的函数是是:SSL_CCTX_loaad_vveriify_loccatiion(SSLL_CTTX *ctxx,coonstt chhar *Caa chhar *Caapatth);为SSL会会话加载载用户证证书的函函数是:SSL_CCTX_usee_ceertiificcatee_ *ctxx, cconsst ccharr * typpe);为SSL会会话加载载用户私私钥的函函数是:SSL_CCTX_usee_PrrivaateKKey_ *cctx,connst chaar* tyype);在将证书和和私钥加加载到SSL会话环环境之后后,就可可以调用用下面的的函数来来验证私私钥和证证书是否否相符:int SSSL_CTXX_chheckk_prrivaate_keyy(SSSL_CCTX *cttx);(4) 建建立SSL套接字字SSL套接接字是建立立在普通通的TCP套接字字基础之之上,在在建立SSL套接字字时可以以使用下下面的一一些函数数:SSL *SSll_neew(SSSL_CTXX *cctx); /申请一一个SSL套接字字int SSSL_sett_fdd(SSSL *ssll,innt ffd);) /绑定读读写套接接字int SSSL_sett_rffd(SSSL *sssl,iint fd); /绑定只只读套接接字int SSSL_sett_wffd(SSSL *sssl,iint fd); /绑定只只写套接接字(5) 完完成SSL握手在成功创建建SSL套接字字后,客客户端应应使用函函数SSL_connnecct( )替代传传统的函函数connnecct( )来完成成握手过过程:int SSSL_connnecct(SSSL *sssl);而对服务器器来讲,则则应使用用函数SSLL_ aacceept ( )替代传传统的函函数accceptt ( )来完成成握手过过程:int SSSL_accceptt(SSSL *ssll);握手过程完完成之后后,通常常需要询询问通信信双方的的证书信信息,以以便进行行相应的的验证,这这可以借借助于下下面的函函数来实实现:X509 *SSSL_gget_peeer_ccerttifiicatte(SSSL *sssl);该函数可以以从SSL套接字字中提取取对方的的证书信信息,这这些信息息已经被被SSL验证过过了。X509_NAMME *X5009_gget_subbjecct_nnamee(X5509 *a);该函数得到到证书所所用者的的名字。(6) 进进行数据据传输当SSL握握手完成成之后,就就可以进进行安全全的数据据传输了了,在数数据传输输阶段,需需要使用用SSLL_reead( )和SSLL_wrritee( )来替代代传统的的reaad( )和wriite( )函数,来来完成对对套接字字的读写写操作:int SSSL_reaad(SSSL *sssl,vvoidd *bbuf,intt nuum);int SSSL_wriite(SSLL *sssl,connst voiid *buff,innt nnum);(7 ) 结束SSL通信当客户端和和服务器器之间的的数据通通信完成成之后,调调用下面面的函数数来释放放已经申申请的SSL资源:int SSSL_shuutdoown(SSLL *sssl); /关闭SSSL套接字字void SSll_frree(SSLL *sssl); /释放放SSL套接字字void SSLL_CTTX_ffreee(SSSL_CCTX *cttx); /释放SSSL会话环环境4 结束束语SSL协议议采用数数字证书书进行双双端实体体认证,用非对对称加密密算法进进行密钥钥协商,用对称称加密算算法将数数据加密密后进行行传输以以保证数数据的保保密性,并且通通过计算算数字摘摘要来验验证数据据在传输输过程中中是否被被篡改和和伪造,从而为为敏感数数据在Intternnet上的传传输提供供了一种种安全保保障手段段。OpenSSSL是一个个开放源源代码的的SSL协议的的产品实实现,它它采用C语言作作为开发发语言,具具备了跨跨系统的的性能。调调用OpeenSSSL 的函数数就可以以实现一一个SSL加密的的安全数数据传输输通道,从从而保护护客户端端和服务务器之间间数据的的安全。SSL 协协议的握握手和通通讯 为为了便于于更好的的认识和和理解 SSSL 协议,这这里着重重介绍 SSSL 协协议的握握手协议议。SSLL 协议既既用到了了公钥加加密技术术又用到到了对称称加密技技术,对对称加密密技术虽虽然比公公钥加密密技术的的速度快快,可是是公钥加加密技术术提供了了更好的的身份认认证技术术。SSLL 的握手手协议非非常有效效的让客客户和服服务器之之间完成成相互之之间的身身份认证证,其主主要过程程如下: 客户端端的浏览览器向服服务器传传送客户户端 SSSL 协议的的版本号号,加密密算法的的种类,产产生的随随机数,以以及其他他服务器器和客户户端之间间通讯所所需要的的各种信信息。 服务器器向客户户端传送送 SSSL 协议的的版本号号,加密密算法的的种类,随随机数以以及其他他相关信信息,同同时服务务器还将将向客户户端传送送自己的的证书。 客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。 如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的 CA 是否可靠,发行 CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。 服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。 客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。 SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。双向认证 SSL 协议的具体过程 浏览器发送一个连接请求给安全服务器。 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。 上面所述的是双向认证 SSL 协议的具体通讯过程,这种情况要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有 CA 证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。 这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用 128 位加密通讯的原因。证书各部分的含义Version 证书版本号,不同版本的证书格式不同 Serial Number 序列号,同一身份验证机构签发的证书序列号唯一 Algorithm Identifier 签名算法,包括必要的参数 Issuer 身份验证机构的标识信息 Period of Validity 有效期 Subject 证书持有人的标识信息 Subjects Public Key 证书持有人的公钥 Signature 身份验证机构对证书的签名证书的格式 认证中心所发放的证书均遵循 X.509 V3 标准,其基本格式如下: 证书版本号(Certificate Format Version) 含义:用来指定证书格式采用的 X.509 版本号。证书序列号(Certificate Serial Number) 含义:用来指定证书的唯一序列号,以标识 CA 发出的所有公钥证书。签名(Signature) 算法标识(Algorithm Identifier) 含义:用来指定 CA 签发证书所用的签名算法。 签发此证书的 CA 名称(Issuer ) 含义:用来指定签发证书的 CA 的 X.500 唯一名称(DN, Distinguished Name)。证书有效期(Validity Period) 起始日期(notBefore) 终止日期(notAfter) 含义:用来指定证书起始日期和终止日期。用户名称(Subject) 含义:用来指定证书用户的 X.500 唯一名称(DN,Distinguished Name)。用户公钥信息(Subject Public Key Information) 算法(algorithm) 算法标识(AlgorithmIdentifier) 用户公钥(subjectPublicKey) 含义:用来标识公钥使用的算法,并包含公钥本身。 证书扩充部分(扩展域)(Extensions) 含义:用来指定额外信息。X.509 V3 证书的扩充部分(扩展域)及实现方法如下: CA 的公钥标识(AuthorityKeyIdentifier) 公钥标识(SET 未使用)(KeyIdentifier) 签发证书者证书的签发者的甄别名(CertificateIssuer) 签发证书者证书的序列号(Certificate Serial Number)X.509 V3 证书的扩充部分(扩展域)及实现CA 的公钥标识(AuthorityKeyIdentifier) 公钥标识(SET 未使用)(KeyIdentifier) 签发证书者证书的签发者的甄别名(Certificat签发证书者证书的序列号(Certificate Serial N含义:CA 签名证书所用的密钥对的唯一标识用户的公钥标识(SubjectKeyIdentifier)含义:用来标识与证书中公钥相关的特定密钥进行解密。 证书中的公钥用途(KeyUsage) 含义:用来指定公钥用途。用户的私钥有效期(PrivateKeyUsagePeriod) 起始日期(NoteBefore) 终止日期(NoteAfter) 含义:用来指定用户签名私钥的起始日期和终止日期。 CA 承认的证书政策列表(Certificate Policies) 含义:用来指定用户证书所适用的政策,证书政策可由对象标识符表示。 用户的代用名(SubstitutionalName) 含义:用来指定用户的代用名。 CA 的代用名(IssuerAltName) 含义:用来指定 CA 的代用名。 基本制约(BasicConstraints) 含义:用来表明证书用户是最终用户还是 CA。 在 SET 系统中有一些私有扩充部分(扩展域)HashedRootKey 含义:只在根证书中使用,用于证书更新时进行回溯。 证书类型(CertificateType) 含义:用来区别不同的实体。该项是必选的。 商户数据(MerchantData) 含义:包含支付网关需要的所有商户信息。 持卡人证书需求(CardCertRequired) 含义:显示支付网关是否支持与没有证书的持卡人进行交易。 SET 扩展(SETExtensions) 含义:列出支付网关支持的支付命令的 SET 信息扩展。 CRL 数据定义版本(Version) 含义:显示 CRL 的版本号。CRL 的签发者(Issuer) 含义:指明签发 CRL 的 CA 的甄别名。 CRL 发布时间(thisUpdate) 预计下一个 CRL 更新时间(NextUpdate) 撤销证书信息目录(RevokedCertificates) CRL 扩展(CRLExtension) CA 的公钥标识(AuthorityKeyIdentifier) CRL 号(CRLNumber)= SSL认证机构是干什么的,在电子商务中如何实现?来源:ChinaITLab2003-1-15 0:52:00 一协协议的起起源 随着着计算机机网络技技术向整整个经济济社会各各层次延延伸,整整个社会会表现对对Intternnet、Inttrannet 、Exttrannet等使用用的更大大的依赖赖性。随随着企业业间信息息交互的的不断增增加,任任何一种种网络应应用和增增值服务务的使用用程度将将取决于于所使用用网络的的信息安安全有无无保障,网网络安全全已成为为现代计计算机网网络应用用的最大大障碍,也也是急需需解决的的难题之之一。 由由于Web上有时时要传输输重要或或敏感的的数据,因此Netscape公司在推出Web浏览器首版的同时,提出了安全通信协议SSL(Secure Socket Layer),目前已有2.0和3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器和客户机两端同时实现支持。目前,利用公开密钥技术的SSL协议,并已成为Internet上保密通讯的工业标准。现行Web浏览器普遍将HTTP和SSL相结合,从而实现安全通信。 二协议概述 安全套接层协议(SSL)是在Internet基础上提供的一种保证私密性的安全协议。它能使客户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对客户进行认证。SSL协议要求建立在可靠的传输层协议(例如:TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的。高层的应用层协议(例如:HTTP,。 。)能透明的建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。 通过以上叙述,SSL协议提供的安全信道有以下三个特性: ? 私密性。因为在握手协议定义了会话密钥后,所有的消息都被加密。 ? 确认性。因为尽管会话的客户端认证是可选的,但是服务器端始终是被认证的。 ? 可靠性。因为传送的消息包括消息完整性检查(使用MAC)。 三协议规范 SSL协议由SSL记录协议和SSL握手协议两部分组成。 1. SSL记录协议: 在SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和长度不为0的记录数据组成的。所有的SSL通信包括握手消息、安全空白记录和应用数据都使用SSL记录层。SSL记录协议包括了记录头和记录数据格式的规定。 1) SSL记录头格式: SSL的记录头可以是两个或三个字节长的编码。SSL记录头的包含的信息包括:记录头的 长度、记录数据的长度、记录数据中是否有粘贴数据。其中粘贴数据是在使用块加密算 法时,填充实际数据,使其长度恰好是块的整数倍。最高位为1时,不含有粘贴数据,记 录头的长度为两个字节,记录数据的最大长度为32767个字节;最高位为0时,含有粘贴 数据,记录头的长度为三个字节,记录数据的最大长度为16383个字节。 当数据头长度是三个字节时,次高位有特殊的含义。次高位为1时,标识所传输的记录是 普通的数据记录;次高位为0时,标识所传输的记录是安全空白记录(被保留用于将来协 议的扩展)。 记录头中数据长度编码不包括数据头所占用的字节长度。记录头长度为两个字节的记录长度的计算公式:记录长度(byte0 ; 0x7f) << 8) | byte1。其中byte0、byte1分别表示传输的第一个、第二个字节。记录头长度为三个字节的记录长度的计算公式:记录长度(byte0 ; 0x3f) << 8) | byte1。其中byte0、byte1的含义同上。判断是否是安全空白记录的计算公式:(byte0 ; 0x40) != 0。粘贴数据的长度为传输的第三个字节。 2) SSL记录数据的格式: SSL的记录数据包含三个部分:MAC数据、实际数据和粘贴数据。 MAC数据用于数据完整性检查。计算MAC所用的散列函数由握手协议中的CIPHERCHOICE消息确定。若使用MD2和MD5算法,则MAC数据长度是16个字节。MAC的计算公式:MAC数据HASH密钥,实际数据,粘贴数据,序号。当会话的客户端发送数据时,密钥是客户的写密钥(服务器用读密钥来验证MAC数据);而当会话的客户端接收数据时,密钥是客户的读密钥(服务器用写密钥来产生MAC数据)。序号是一个可以被发送和接收双方递增的计数器。每个通信方向都会建立一对计数器,分别被发送者和接收者拥有。计数器有32位,计数值循环使用,每发送一个记录计数值递增一次,序号的初始值为0。 2. SSL握手协议: SSL握手协议包含两个阶段,第一个阶段用于建立私密性通信信道,第二个阶段用于客户认证。 1) 第一阶段: 第一阶段是通信的初始化阶段,通信双方都发出HELLO消息。当双方都接收到HELLO消息时,就有足够的信息确定是否需要一个新的密钥。若不需要新的密钥,双方立即进入握手协议的第二阶段。否则,此时服务器方的SERVERHELLO消息将包含足够的信息使客户方产生一个新的密钥。这些信息包括服务器所持有的证书、加密规约和连接标识。若密钥产生成功,客户方发出CLIENTMASTERKEY消息,否则发出错误消息。最终当密钥确定以后,服务器方向客户方发出SERVERVERIFY消息。因为只有拥有合适的公钥的服务器才能解开密钥。下图为第一阶段的流程: 需要注意的一点是每一通信方向上都需要一对密钥,所以一个连接需要四个密钥,分别为客户方的读密钥、客户方的写密钥、服务器方的读密钥、服务器方的写密钥。 2) 第二阶段:第二阶段的主要任务是对客户进行认证,此时服务器已经被认证了。服务器方向客户发出认证请求消息:REQUESTCERTIFICATE。当客户收到服务器方的认证请求消息,发出 自己的证书,并且监听对方回送的认证结果。而当服务器收到客户的认证,认证成功返回SERVERFINISH消息,否则返回错误消息。到此为止,握手协议全部结束。 3. 典型的协议消息流程: 消息名 方向 内容 不需要新密钥 CLIENTHELLO C>S challenge, session_id, cipher_specs SERVERHELLO S>C connection-id, session_id_hit CLIENTFINISH C>S Eclient_write_keyconnection-id SERVER-VERIFY S>C Eserver_write_keychallenge SERVERFINISH S>C Eserver_write_keysession_id 需要新密钥 CLIENTHELLO C>S challenge, cipher_specs SERVERHELLO S>C connection-id,server_certificate,cipher_specs CLIENTMASTERKEY C>S Eserver_public_keymaster_key CLIENTFINISH C>S Eclient_write_keyconnection-id SERVERVERIFY S>C Eserver_write_keychallenge SERVERFINISH S>C Eserver_write_keynew_session_id 需要客户认证 CLIENTHELLO C>S challenge, session_id, cipher_specs SERVERHELLO S>C connection-id, session_id_hit CLIENTFINISH C>S Eclient_write_keyconnection-id SERVER-VERIFY S>C Eserver_write_keychallenge REQUESTCERTIFICATE S>C Eserver_write_keyauth_type,challenge' CLIENTCERTIFICATE C>S Eclient_write_keycert_type,client_cert,response_data SERVERFINISH S>C Eserver_write_keysession_id 四相关技术: 1. 加密算法和会话密钥: 如前所述,加密算法和会话密钥是在握手协议中协商并有CIPHERCHOICE指定的。现有的SSL版本中所用到的加密算法包括:RC4、RC2、IDEA和DES,而加密算法所用的密钥由消息散列函数MD5产生。RC4、RC2是由RSA定义的,其中RC2适用于块加密,RC4适用于流加密。下述为CIPHERCHIOCE的可能取值和会话密钥的计算: SSL_CK_RC4_128_WITH_MD5 SSL_CK_RC4_128_EXPORT40_WITH_MD5 SSL_CK_RC2_128_CBC_WITH_MD5 SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 SSL_CK_IDEA_128_CBC_WITH_MD5 KEY-MATERIAL-0 = MD5 MASTER-KEY, "0", CHALLENGE, CONNECTION-ID KEY-MATERIAL-1 = MD5 MASTER-KEY, "1", CHALLENGE, CONNECTION-ID CLIENT-READ-KEY = KEY-MATERIAL-00-15 CLIENT-WRITE-KEY = KEY-MATERIAL-10-15 SSL_CK_DES_64_CBC_WITH_MD5 KEY-MATERIAL-0 = MD5 MASTER-KEY, CHALLENGE, CONNECTION-ID CLIENT-READ-KEY = KEY-MATERIAL-00-7 CLIENT-WRITE-KEY = KEY-MATERIAL-08-15 SSL_CK_DES_192_EDE3_CBC_WITH_MD5 KEY-MATERIAL-0 = MD5 MASTER-KEY, "0", CHALLENGE, CONNECTION-ID KEY-MATERIAL-1 = MD5 MASTER-KEY, "1", CHALLENGE, CONNECTION-ID KEY-MATERIAL-2 = MD5 MASTER-KEY, "2", CHALLENGE, CONNECTION-ID CLIENT-READ-KEY-0 = KEY-MATERIAL-00-7 CLIENT-READ-KEY-1 = KEY-MATERIAL-08-15 CLIENT-READ-KEY-2 = KEY-MATERIAL-10-7 CLIENT-WRITE-KEY-0 = KEY-MATERIAL-18-15 CLIENT-WRITE-KEY-1 = KEY-MATERIAL-20-7 CLIENT-WRITE-KEY-2 = KE