白话HTTPS
HTTP协议是明文传输的协议,安全性极差。HTTPS解决了HTTP的安全问题,因为HTTPS是密文传输:当你使用HTTPS时,数据是使用对称加密算法(一般都是AES)加密后再进行传输的。
TLS
现在我们知道,HTTPS是使用对称加密算法来加密数据的,所以,HTTPS最关键的问题,是客户端和服务端之间,是如何获得这个对称加密算法的秘钥的?答案是TLS。
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。
TLS的优势是与高层的应用层协议(如HTTP、FTP等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。
TLSHTTPS不是一种新的协议,HTTPS只是使用了TLS的HTTP。
TLS是由SSL发展而来,所以也叫SSL/TLS。TLS之所以能保证数据的保密性,是因为使用TLS的应用层协议,数据都是通过对称加密算法(一般都是AES)加密过的。
由于对称加密需要通信双方都知道秘钥,所以TLS最关键的问题,是如何让通信双方安全地获得秘钥。TLS是在握手过程中交换这个秘钥的。
TLS握手过程TLS握手的结果是,客户端和服务端之间获得了对称加密的秘钥。握手过程之所以那么复杂,是为了保证对称加密的秘钥只有客户端和服务端知道。
握手过程中,客户端和服务端双方交换了三个随机数,最后对称加密的秘钥是使用这个三个随机数生成的。这个三个随机数中,随机数1和随机数2都是明文传输的,只有随机数3是使用非对称加密算法(一般是RSA)加密后再传输的,这是保证对称加密秘钥不会泄露的核心。
那随机数3是怎么加密的呢?在传输随机数3前,服务端给客户端发送了数字证书和公钥,客户端收到数字证书后,会联系CA,验证数字证书的真实性。通过验证服务端数字证书的真实性,确认了服务端可信。然后,客户端使用服务端发来的公钥加密了随机数3,再传输给服务端。因为只有服务端有相应的私钥,所以只有服务端能够获取到随机数3。
中间人攻击
TLS并不是无懈可击,主要是上面所说的握手过程,是可以被破解的,这种破解方法,叫做中间人攻击。
Man-in-the-middle-attack.png我们知道HTTPS也是可以抓包的,通过抓包软件是可以获取到HTTPS通信的原文内容的。抓包的原理就是中间人攻击,抓包软件就是那个中间人。
中间人攻击的前提有两个:
-
中间人被设置为网络代理。就是说,客户端不是直接和服务端直接通讯,他们中间还隔了一个代理。
-
客户端安装了网络代理提供的证书。
满足了上述要求后,中间人就可以在TLS握手过程做手脚了:客户端的TLS握手过程其实是和中间人完成的,由于客户端安装了中间人提供的证书,是可以通过数字证书验证的环节的,所以结果是客户端和中间人完成了对称加密秘钥的互换。
所以,防止中间人攻击的方式也很简单,避免上述两个任意一个环节就能避免中间人攻击。尤其是第二个,你的电脑或者手机千万不要安装来路不明的证书。
总的来说TLS还是很安全的,可以说是目前互联网的基石。没有TLS,就没有安全的网络传输。
网友评论