(这篇文章是看了某位大佬的文章后算是自己有了一定的总结,以自己容易理解的形式整理出来的
HTTP和HTTPS是什么?
HTTP(Hypertext Transfer Protocol) 超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP可以说是当代互联网通信的基础。
HTTPS(Hypertext Transfer Protocol Secure) 超文本传输安全协议,本质上也是利用的HTTP通信,但是利用了SSL/TLS加密数据包。
为什么说HTTPS比HTTP安全?
说这个问题之前,就要弄明白一个事,就是HTTP为什么不安全。
使用HTTP协议通信,内容是明文传输,并不会有任何加密。而这些明文数据经过运营商、路由器、wifi等多个物理设备节点,如果其中某一个中间节点被监听,传输的内容就会完全暴露。通过这种行为进行攻击的手法叫做MITM(Man In The Middle)中间人攻击。
了解到HTTP不安全,HTTPS随之而生。
这就应该能知道HTTPS究竟是解决了HTTP的哪点问题。
HTTPS如何保证安全?
HTTPS就是将HTTP的数据包通过SSL/TLS加密后输出。
整个流程就是:
- 客户端发起请求
- 服务端收到请求,发送携带公钥的CA证书到客户端,自身保留一份对应的私钥
- 客户端对CA证书的合法性进行校验,校验通过则继续,不通过则显示https警告
- 客户端生成一个用于对称加密的随机key,并用CA证书内的公钥进行加密,发送给服务端
- 服务端利用私钥解密,得到随机key,并将客户端需要的数据用这个随机key加密传到客户端
- 客户端再利用这个随机key进行解密得到所需要的数据
- 之后则利用随机key值进行对称加解密
再谈谈这个流程涉及到的几个点
1.对称加密
对称加密是指有一个密钥,用其对一段明文数据加密后,只有用这个密钥来解密才能得到对应的明文数据。
2.非对称加密
非对称加密有两个密钥,一个私钥,一个公钥。一般来说,公钥用来加密,加密后的数据只有用私钥才能够解开。
3.CA证书
CA证书是CA机构颁发的数字证书,这个数字证书内包含有证书持有者、证书有效期、公钥等信息。服务端将证书发到客户端,客户端校验证书合法性后再进行后续的加密操作。CA机构拥有自己的一对公钥和私钥。
最后谈谈这个流程中的一些疑惑
1. 为什么不单用对称加密或者是非对称加密?
对称加密适用于两方都知道这个密钥的时候,而客户端和服务端事先也不可能就知道要和哪个进行通信,也就没法使用对称加密了。 非对称加密一对密钥,当客户端发起请求,服务端将公钥传到客户端,客户端用公钥加密,服务端再用私钥解密得到数据。但是服务端返回数据如果用公钥加密,客户端是没有对应的私钥进行解密的。如果用私钥加密,客户端用公钥解密,这个逻辑上是可行的,但是既然能用公钥解密,之前公钥也就暴露了很可能被其他拿到这个信息。
2. 那么为什么不使用两对非对称加密呢?
客户端用一对密钥,服务端也用一对密钥。这个也是可行的,但是由于非对称加解密耗时远大于对称加解密,对性能有很大损耗,这样用户体验就会极差。所以也就不单用非对称加密。
3. 为什么要使用CA证书的形式?
在第一次通信的过程中,使用非对称加密的形式将公钥传到客户端,然后客户端创一个随机key用公钥加密传给服务端,服务端用私钥解密后,使用随机key对数据进行加密传给服务端,服务端就可以用随机key值对数据进行解密。之后通信就可以利用这个随机key值进行解密了。
服务端会将公钥传给客户端,那怎么保证客户端收到的公钥就是服务端传的公钥呢? —— CA机构
为了解决客户端无法确认收到的公钥是不是真的来自服务端,互联网就引入了一个公信机构,也就是CA。服务端在使用HTTPS前,去认证过的CA机构申请颁发一份数字证书。数字证书是由明文数据和数字签名所组成,数字签名是由明文信息进行哈希后用私钥加签所得到。当证书有被改动,那么签名必然校验失败。
总结
HTTPS的出发点是解决HTTP明文传输时信息被篡改和监听的问题,为了兼顾性能和安全性,使用了对称加密和非对称加密结合;为了保证公钥传输中不被篡改,使用了非对称加密的数字签名,借助CA机构和系统根证书的机制保证HTTPS证书的公信力。