SSL协议实现过程分析
一、 SSL协议基本介绍
安全套接层(Secure Sockets Layer,SSL)是网景公司(Netscape)在推出Web浏览器首版的同时,提出的协议。SSL采用公开密钥技术,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。可在服务器和客户机两端同时实现支持,目前已成为互联网上保密通讯的工业标准,现行Web浏览器亦普遍将Http和SSL相结合,从而实现安全通信。此协议和其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
打开Internet 选项可以看到使用的SSL3.0 和TLS1.0 TLS1.1 TLS1.2协议。
二、 SSL协议工作流程
(一) SSL建立握手连接目的
1. 身份的验证,client与server确认对方是它相连接的,而不是第三方冒充的,通过证书实现。
2. client与server交换session key,用于连接后数据的传输加密和hash校验。
(二) 简单的SSL握手连接过程 (仅Server端交换证书给client):
1. client发送Client Hello,指定版本,随机数(RN),所有支持的密码套件(Cipher
Suites)。
2. server回应Server Hello,指定版本,RN,选择Cipher Suites,会话ID(Session
ID) ,发送Certificate ,Server Hello Done。
3. Client发送Client Key Exchange,用于与server交换session key 。
4. Client发送Change Cipher Spec,指示Server从现在开始发送的消息都是加密
过的 。
5. Client发送Finished,包含了前面所有握手消息的hash,可以让server验证
握手过程是否被第三方篡改 。
6. Server发送Change Cipher Spec,指示Client从现在开始发送的消息都是加密
过的。
7. Server发送Finished,包含了前面所有握手消息的hash,可以让client验证
握手过程是否被第三方篡改,并且证明自己是Certificate密钥的拥有者,即证明自己的身份 。
三、 抓包分析
下面从抓包数据来具体分析这一过程并说明各部分数据的作用以及如实现前面列出的握手的目标。 (一)
client发送Client Hello
每一条消息都会包含有Content Type,Version,Handshake Type等信息。
Content Type指示SSL通信处于哪个阶段,是握手(Handshake),开始加密传输(Change Cipher Spec)还是正常通信(Application)等,我小组成员查阅相关资料,查到下表:
Hex 0x14 0x15 0x16 0x17
Dec 20 21 22 23 Type Change Cipher Spec Alert Handshake Application Version是TLS的版本,见下表 Major Version 3 3 Minor Version 0 1 Version Type SSLv3 TLS 1.0 3 3
2 3 TLS 1.1 TLS 1.2 Handshake Type是在handshanke阶段中的具体哪一步,见下表:
(例如:从下表可以看出Handshake Type的Code为01,就是处于ClientHello阶段) Code 0 1 2 11 12 13 14 15 16 20 Description HelloRequest ClientHello ServerHello Certificate erverKeyExchange CertificateRequest ServerHelloDone CertificateVerify ClientKeyExchange Finished
ClientHello附带的数据随机数据RN,会在生成session key时使用,Cipher suite列出了client支持的所有加密算法组合,可以看出每一组包含3种算法,一个是非对称算法,如RSA,一个是对称算法如DES,3DES,RC4等,一个是Hash算法,如MD5,SHA等,server会从这些算法组合中选取一组,作为本次SSL连接中使用。
(二)
server回应Server Hello
server共发送了3个handshake 消息:Serverhello,Certificate和ServerHelloDone3.server发送Certificate
相关推荐: