SSL的发展历史
1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
1996年,SSL 3.0版问世,得到大规模应用。
1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版 TLS1.0版。
2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的 修订版 。
目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
SSL协议介绍:
SSL是一个不依赖于平台和运用程序的协议,位于TCP/IP协议与各种应用层协议之间,为数据通信提高安全支持。
SSL加密知名协议:
HTTP over SSL:
简写https,加密网页浏览是设计SSL的初衷,HTTP也是第一个使用SSL保障安全的应用层协议。
当Netscape(网景)在它的Navigator里面运用HTTP over SSL的时候,使用https://来标识HTTP over SSL,因此我常见的https的全称就是HTTP over SSL。后来HTTPS在RFC2818被标准化。HTTPS工作在443端口,而HTTP默认工作在80端口。
Email over SSL:
类似于HTTP over SSL,邮件协议例如:
- SMTP,POP3、IMAP也能支持SSL
- SMTP over TLS的标准文档在RFC2487
- POP3和IMAP overTLS的标准化文档在RFC2595.
SSL原理详解
SSL协议结构图:
ssl子协议讲解
SSL握手协议(重点):
1.身份的验证,client与server确认对方是它相连接的,而不是第三方冒充的,通过证书实现
2.client与server交换session key,用于连接后数据的传输加密和hash校验
SSL记录协议(重点):
它建立在可靠的传输(如TCP)之上,为高层协议提供数据封装、压缩与解压缩、加解密以及完整性检查等基本功能。
每个ssl记录包含如下信息
- 内容类型
- 协议版本
- 记录数据的长度
- 数据有效载荷
- HMAC
密码变化协议
这个协议只包含一条信息(ChangeCipherSpec)。客户端和服务器双方都可以发送,目的是通知对方后面发送的数据将启用新协商的算法和密钥。
告警协议
客户机和服务器发现错误是,向对方发送一个警报信息,如果是致命错误,则算法立即关闭ssl连接,双方还会先删除相关的会话和密钥
ssl协议建立过程
在用SSL进行通信之前,首先要使用SSL的Handshake协议在通信两端握手,协商数据传输中要用到的相关安全参数(如加密算法、共享密钥、产生密钥所要的材料等),并对对端的身份进行验证。
SSL的建立过程总共有13个包,第一次建立至少需要9个包。
SSL抓包具体分析:
握手阶段如上图所示,可分为5步(使用Diffie – Hellman算法):
第一步,浏览器给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
第二步,服务器确认双方使用的加密方法,使用的tls版本号和一个随机数。
第三部,并给出数字证书、以及一个服务器运行Diffie-Hellman算法生成的参数,比如pubkey。
第四部,浏览器获取服务器发来的pubkey,计算出另一个pubkey,发给服务器。
第五部,服务器发给浏览器一个session ticket。
Client Hello:客户端向服务端打招呼;携带支持的协议、支持的安全套件供服务端选择;
Server Hello:服务端回应客户客户端的招呼信息;结合客户端的信息,选择合适的加密套件;
Certificate:服务端向客户端发送自己的数字证书(此证书包含服务端的公钥),以实现验证身份;
Server Key Exchange:服务端向客户端发送基于选择的加密套件生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);
Server Hello Done:服务端向客户端表示响应结束;
Client Key Exchange:客户端向服务端发送自己生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);
Change Cipher Spec:变更密码规范;告知服务端/客户端,以后的通信都是基于AES加密的;
Encrypted Handshake Message:基于协商生成的密钥,用AES加密验证信息让服务端/客户端进行认证;如果对方可以解密,则双方认证无误开始通信;
New Session Ticket:是优化SSL连接的一种方法,此处不做特别说明
身份验证过程:
-
权威ca会用自己的私钥加密服务器认证信息;
当客户端访问服务器的时候,服务端会向客户端发送自己的证书,由内置在浏览器的ca公钥进行解密,得到服务端的公钥;
由此验证公钥,私钥,从而达到验证身份的目的;
客户端Client Hello阶段:
-
作用:客户端向服务端发送建立连接请求;
此时,客户端会携带支持的版本号、支持的加密套件(包括认证算法、交换密钥算法、数据加密算法、数据数据校验)、客户端随机数(用于协商对称加密的密钥)。
服务端Server Hello阶段:
- 作用:根据客户端所携带的内容,确定建立连接版本、加密套件,生成服务端随机数(用于协商对称加密的密钥)
服务端Certificate, Server Key Exchange, Server Hello Done阶段:
Certificate:向客户端发送由权威ca签发的证书,以验证身份
Server Key Exchange:基于Server Hello阶段选择的ECDHE交换密钥算法,发送椭圆曲线生成的公钥
Server Hello Done:服务端结束打招呼阶段
协商对称加密密钥的过程说明:
-
ECDHE算法会根据自己的私钥、客户端/服务端传递过来的公钥、客户端/服务端的随机数生成密钥;
客户端与服务端通过离散对数的幂运算生成的密钥是一样的;
由此客户端/服务端生成的对称加密密钥是一致的,但还是会发送一条由此密钥加密的消息让对方进行验证;
客户端Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message阶段:
Client Key Exchange:基于协商选择的ECDHE交换密钥算法,发送它生成的椭圆曲线的公钥;
Change Cipher Spec:变更密码规范协议,它非常简单,就是一条通知消息,告知对方以后的通信都是加密的;
Enctypted Handshare Message:生成对称加密密钥之后,发送一条加密的数据,让服务端解密验证;
服务端New Session Ticket, Change Cipher Spec, Encrypted Handshake Message阶段:
New Session Ticket:TLS建立连接的优化方法,此处不说;
Change Cipher Spec:告诉客户端以后的通信是加密的;
Enctypted Handshare Message:发送一条经过密钥加密的数据,让客户端验证;验证通过则开始进行加密通信;
Applicatiion Data:表示客户端/服务端已经开始基于TLS进行通信了;
参考文章1
参考文章2
参考文章3
参考文章4