SSL/TLS 运行原理

SSL/TLS是网络安全通信的基础,在协议创立以来经受住了几十年的安全考验,虽然偶有出现风险(Heartbleedy),但是协议本身的安全是毋庸置疑的。对于安全协议,自己也理解了很多,所以想整理一份各个安全协议的博客系列,供自己查阅与大家交流。本期就主要讲解SSL/TLS协议。
无论是SSL(安全套接层Secure Sockets Layer)还是其后续发展版本TLS(传输层安全协议Transport Layer Security)都是一种安全协议,目的是为网络通信提供保密性以及完整性保证。鉴于该协议的悠久历史与广泛应用,该协议已经成为网络安全通讯的工业标准。
网络安全通讯协议的发展经历了SSL1.0(N\A Taher Elgamal 塔希尔·盖摩尔) -> SSL2.0(1995) ->SSL 3.0(1996) ->TLS1.0(1999) -> TLS1.1(2006) -> TLS1.2(2008) -> TLS1.3(2016草案),推动整个协议往前发展的动力则是攻击技术的不断进步,这也促使协议不断完善,安全性不断提高。这也间接说明了,攻防是一体的,从来都没有独立的发展。两者相互促进共同发展。
SSL 协议包含传输层与记录层,记录层协议用来定义传输层数据的封装格式。传输层安全协议使用X.509进行认证,整个SSL是建立在PKI体系的基础上,通过非对称密钥运算进行身份认证,之后通过交互信息协商会话密钥(Session Key)。 会话密钥用于后续的通信信息的加密,保证通信的安全性与保密性。
SSL/TLS 包含三个阶段:
1. 客户端与服务器端协商支持的密钥算法
2. 基于PKI体系的身份认证以及会话密钥的协商
3. 基于对称密钥的安全通信
其中,在第一阶段,客户端与服务器协商所用密码算法。当前广泛实现的算法选择如下:
公钥私钥非对称密钥保密系统:RSA、Diffie-Hellman、DSA;
对称密钥保密系统:RC2、RC4、IDEA、DES、Triple DES、AES以及Camellia;
单向散列函数:MD5、SHA1以及SHA256。
上述三个阶段中,前两个阶段被称为握手阶段(handshark),握手阶段的主要作用是完成身份认证以及会话密钥的协商。下面主要介绍握手阶段的通信交互流程
这里写图片描述
此处主要参考http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html:
1. 客户端向服务器端发起通信请求(ClientHello)
① 客户端支持的安全协议版本如TLS1.1
② 客户端生成的随机数 Random1
③ 支持的公钥加密算法 如RSA
④ 支持的压缩算法
2. 服务器相应信息 (ServerHello)
① 确认通信使用的安全协议版本,如果客户端申明的安全协议版本不合适,则直接中断
② 服务器生成的随机数 Random2
③ 确认使用的加密算法 如RSA
④ 服务器的身份数字证书
3. 客户端回应
① 一个随机数Random3 (pre-master-key),该随机数需要使用服务器端证书进行加密
② 通信编码改变通知,申明后续的通讯均使用协议约定的加密算法通讯
③ 客户端握手结束通知,此处客户端需要将前面所有通信内容进行哈希运算,用于服务器验证。
在该阶段,客户端与服务器端已经拥有了三个随机数,根据协议约定的会话密钥生成办法生成会话密钥。
4. 服务器端响应
① 通信编码改通知,申明后续的通讯均使用协议约定的加密算法通讯,加密密钥则是根据三个随机数生成的会话密钥
② 服务器端握手结束通知,此处服务器端会将签名所有的信息哈希运算。
至此,整个握手阶段的通信已经结束,后续的通讯内容仍旧采用的是HTTP协议(port443),但是传输的内容都已经使用握手阶段协商的会话密钥进行加密。

你可能感兴趣的:(安全-协议)