关于TLS经验小结(上)

1.什么是tls?
安全传输层协议(Transport Layer Security)用于在两个通信应用程序之间提供保密性和数据完整性。TLS是SSL的标准化后的产物,有有1.0 1.1 1.2 1.3四个版本,目前最常用的是tls1.2协议。
1.tls的一些概念
1.1 算法种类
非对称加密: RSA DH
对称加密: AES DES
Hash算法(散列): md5 sha1 sha256
PKI:数字签名

1.2 tls协议里面的算法的概念
密钥交换算法(Kx)
认证算法(Au)
加密算法(Enc)
消息摘要算法(Mac)

说了这么多,估计大家也有点懵逼了。大家肯定也有一个疑问,上述介绍的这些到底有什么用呢?
ok 先上个图:
image
这张图描述的是SSL通过RSA非对称加密方式的握手流程:
1.1 ssl握手过程:
1.客户端(一般为浏览器)向服务器发起send hello 其中的内容为:
1.1协议版本号(支持的tls版本) 1.2客户端生成的随机数(Client random) 1.3以及客户端支持的对称加密方法集。
2.服务端根据客户端send hello请求内容返回本次通信的tls版本, 具体使用哪一种对称加密方法,服务器生成的随机数(Server random) 以及服务器的证书及证书链。
3.客户端采用对应CA的公钥(认证算法)检查该证书是否有效、有没有 过期。如果证书没有问题。就再生成一个新随机数(Premaster secret)。 并且用服务端给的证书公钥加密这个随机数发送给服务器。
4.服务器用证书秘钥解密客户端发来的加密随机数(Premaster secret)。根据刚才双方协商的对称加密算法,使用之前的三个随机数去生成一个对话秘 钥,接下来的所有通信加解密都使用这个对话秘钥进行。
1.2 为什么要用非对称加密?
在进行ssl握手时(此时只是建立连接并没有开始传输数据)一切的握手传输数据都是明文的。 而我们在握手成功后最终需要用来对数据进行加解密的是对称加密方法。对称加密方法的好处 是,体积小,效率高。缺点也是显而易见,通信的暗号或密码绝对不能被他人知道。但是ssl 握手时是明文。所以为了不暴露对称加密的暗号或密码我们需要用非对称加密的方式保护起来。
1.3 这样的握手机制真的很安全吗?
刚才的RSA握手机制我们注意到以下几点:
1.一共生成了3次随机数
2.服务器需要将自己的证书公钥发送给客户端已便客户端生成Premaster secret
那么问题来了?
如果在你(客户端)与服务器中间有一个每天都没事情做,和你怼上了就一直监控收集你和 服务端之间的通信数据的中间人。然后某一天服务器的私钥不小心泄露了,又刚好秘钥被 这个中间人获得了,因为握手时数据为明文而且为了客户端生成Premaster secret 服 务端发送了公钥,所以中间人很容易得到公钥。最后不幸的事情发生了,中间人有公钥也 有秘钥。虽然服务器马上更换了证书。但是之前的数据,中间人全部都可以解密而获得到。
那有什么办法可以规避?
image
上图是基于DH算法的SSL握手流程
DH和RSA有什么区别吗?
其他的步骤基本一致,只有一点。
RSA采用的是服务器发送证书公钥,客户端公钥加密随机数再传输给服务端解密最后 生成session key
而DH采用的是服务端发送算法的相应算法加解密参数,客户端也发送算法的相应参数。然后两边自己算自己的。最后对比,如果一致则建立session key,这样就算泄露了,由于在建立连接时并没有传输证书公钥所以不会对之前的数据产生被破解的风险。这就是PFS(Perfect Forward Secrecy)完美前向安全性。

猜你喜欢

转载自blog.csdn.net/dearmark/article/details/78207870
今日推荐