目录
1. SSL简介
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
1.1 应用
最常见的应用HTTPS,端口号443
1.2 SSL协议版本
S S L 1.0 ( 没 有 实 际 投 入 使 用 ) → S S L 2.0 → S S L 3.0 → T L S 1.0 → T L S 1.1 → T L S 1.2 → T L S 1.3 SSL1.0(没有实际投入使用) \rightarrow SSL2.0 \rightarrow SSL3.0 \rightarrow TLS1.0 \rightarrow TLS1.1 \rightarrow TLS1.2 \rightarrow TLS1.3 SSL1.0(没有实际投入使用)→SSL2.0→SSL3.0→TLS1.0→TLS1.1→TLS1.2→TLS1.3
SSL协议最初由Netscape公司率先主导开发,后主导权转移到IETF后,在SSL3.0基础上,制定了后来的TLS几代标准。
1.3 SSL协议在网络中的层次
可以看到SSL协议是在传输层之上,应用程序之下
1.4 SSL协议的功能
简单的来说主要是三个功能
- 加密
- 认证
- 完整性保护
1.5 SSL协议中几个概念
- 会话(Session):是指客户和服务器之间的一个关联关系。会话通过握手协议来创建。它定义了一组安全参数。
- 连接(Connection):用于提供某种类型的服务数据的传输,是一种点对点的关系。一般来说,连接的维持时间比较短暂,并且每个连接一定与某一个会话相关联。
2. SSL协议建立流程
可以把连接流程分为两类:
- 不使用DH算法
- 使用DH算法
2.1 不使用DH算法
客户端©,服务端(S)
- 第一步:C发送自己的协议版本号、一个随机数、自己支持的加密算法
- 第二步:S确认使用的加密算法,给出自己的证书、一个随机数
- 第三步:C确认证书有效,自己再生成一个新的随机数(Premaster secret),并使用证书中的公钥加密发送给S
- 第四步:S使用私钥解密,获得随机数
- 第五步:C和S根据约定的加密算法,使用前面三个数据时,生成session key(会话密钥),加密接下来的整个对话过程
2.2 使用DH算法
我们会发现上面一个过程,最终会话密钥的生成由三个随机数决定,而前两个随机数都为明文传输,过攻击者只需要能够猜测出第三个随机数就能获得密钥。DH算法使用一种更难破解的方式生成会话密钥
可以看到第三和第四步由原来的传递第三个随机数变为传递DH算法所需要的参数
3. SSL报文分析
在这里只分析使用DH算法的握手协议
第一步
第二步
第三步
第四步
第五步
与前面的过程稍有不同,这里第五步中还有一个新建会话ticket的过程
4. 会话恢复
会话恢复方式有两种:Session ID和Session Ticket
4.1 Session ID
每一次对话都有一个编号,如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的"对话密钥",而不必重新生成一把。
缺点: session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。session ticket就是为了解决这个问题而诞生的
4.2 Session Ticket
客户端不再发送session ID,而是发送一个服务器在上一次对话中发送过来的session ticket。这个session ticket是加密的,只有服务器才能解密,其中包括本次对话的主要信息,比如对话密钥和加密方法。当服务器收到session ticket以后,解密后就不必重新生成对话密钥了
参考资料
http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html