前几天,看了图解http这本书,感觉很有意思,文章简单直观,特简单记下笔记后面查看。
HTTP的缺点
现有http的缺点为:
1.通信使用明文,内容容易被监听;
2.不验证通信方的身份,因此可能会遭遇伪装;
3.无法证明报文的完整性,因此报文遭遇篡改风险。
通信加密
通信加密方式分为两种:
- 通信加密,http和SSL(Secure Socket Layer,安全套接层)、http和TLS(Transport Layer Security),主要是对于通信线路进行加密,这两个简称HTTPS,超文本传输协议。
- 内容加密,主要是对于通信内容加密,需要终端和服务器拥有加解密方法,其中报文首部不加密,只对报文内容进行加密。
其中中间人攻击是指,在传输过程中,传输内容被篡改或者拦截。那么如何验证传输报文的完整性了,虽然http协议可以在一定程度上保证传输报文的完整性,但是并不可靠,便捷。
http是无法确认通信双方的
传输报文如何防止被篡改?
HTTP:可以利用MD5和SHA-1散列值进行对比,以及确认文件的数字签名方法来进行校验。
如果MD5被修改了,用户是很难意识到的,所以http本身并不牢固。
HTTPS=HTTP+加密+认证+完整性保护
https不像http直接和tcp通信,而是http先和SSL或者TLS通信,然后SSL或者TLS和tcp通信。
其实SSL是独立的一个通信协议,所以不仅HTTP和其可以搭配使用,SMTP和Telnet等协议也可以和它搭配使用。
说了那么多,那么什么是SSL了?
SSL协议
加密方法
SSL采用的是公开密钥加密。
对称加密/共享密钥:加密和解密使用同一个密钥。
那么存在一个问题,如何将共享密钥发送给通信双方,信道是开放的,因此如何将这个密钥发送给双方是问题?
可以采用的方法是公开密钥来解决共享密钥加密的困难。
原理如下:终端将自己的公钥公布出来,然后服务器可以利用该公钥对报文进行加密,然后将报文发送出去。终端接收到报文后,利用自己的私钥对报文进行解密。
HTTPS采用的就是对称密钥和公开密钥混合加密方式
如果对称密钥中的密钥可以安全传递,则会首先使用对称密钥,毕竟对称密钥的处理速度要比公开密钥快多了。所以一般来说:在刚开始交换密钥时,首先利用公共密钥加密,则得到密钥后,然后利用对称密钥来进行加密,这样综合下来通信效率会高很多。
如果在公开密钥发送中,敌方破解了密钥,重新伪造密钥,接收方也很难知道。那么怎么增加安全性呢?
使用数字证书CA和公开密钥证书可以保证密钥的正确性。
整个HTTPS的通信过程
下图是整个流程的图解: