目录
1、HTTP
HTTP:超文本传输协议,是一种常用的应用层协议,它用于传输客户端和服务器端的数据。HTTP具体详见(184条消息) 详谈HTTP协议_不会秃头的小齐的博客-CSDN博客_http地址。
HTTP的使用很简单也很方便,但却存在以下3个致命的问题:
1、使用明文通讯,内容可以被监听。(比如前后端交互前开启Fiddler抓包,或者用开发者工具很容易就能获取到传输数据)
2、不验证通讯方的真实身份,可能会遭到伪装,那么我们的数据也很容易就被监听到。(在客户端和服务器端中间有个伪装人)
3、无法证明报文的完整性,很容易被篡改。
鉴于以上三种问题,所以我们有了HTTPS来替代HTTP。
2、HTTPS
首先来说HTTPS并不是一种新的协议,而是在HTTP协议的基础上添加了加密机制SSL(Secure Socket Layer)或TLS(Transport Layer Security)。
SSL和TLS可以认为是一种东西的两个不同的版本。
HTTPS = HTTP + 加密 + 认证 + 完整性保护
2.1 解决信任问题——证书
HTTPS解决信任问题采用的是数字证书的解决方案,也就是在服务器创建之初,会先向一个大家都认可的第三方平台申请一个可靠的数字证书,然后在客户端访问服务器时,服务器端会先将自己的证书发给客户端,来证明自己是一个可靠的服务器,而非“中间人”。
此时客户端就会对证书进行有效性验证,如果证书有问题,那么客户端会立即中止通讯,如果没问题才会继续执行后续操作。
百度服务器发送到浏览器的证书:
2.2 解决明文传输和完整性问题——加密
加密主要分为两大类:
①对称加密,在对称加密中,有一个共享密钥,通过这把共享密钥可以实现信息的加密和解密,它的特点是加密和解密的速度很快,但因为共享密钥的问题,一旦共享密钥被截获,那么所谓的加密和解密也就是一纸空谈了。
②非对称加密,有一对密钥:公钥和私钥,使用公钥可以加密信息,但不能解密信息,使用私钥可以解密信息。它的特点是服务器端保存私钥,不对外暴露,只将公钥发送给客户端,而其他人就算截获了公钥,也无法解密信息,所以此方式更安全,但非对称加密的执行速度比较慢。
HTTPS中用了哪种加密方式呢?
使用对称加密,速度快,但不安全;使用非对称加密,安全但速度慢,所以为了既安全又相对高效,HTTPS中两种加密方式都用到了。
2.3 HTTPS实现原理
实现过程概述:
①浏览器通过HTTPS协议访问服务器;
②服务器端收到HTTPS请求,使用非对称加密,准备一把公钥,一把私钥,此时将自己的证书和公钥发送给浏览器;
③浏览器接收到服务器端发来的信息后,先验证证书是否有效,若有效,则进行下一步:使用对称加密,用共享密钥对数据进行加密,然后再用公钥对共享密钥进行加密,然后将加密的数据和加密的共享密钥发送给服务器端;
④服务器端收到信息后,用保留在服务器端的私钥进行解密拿出共享密钥,再用共享密钥打开数据,获取数据信息;
⑤由于现在客户端和服务器端都有了一把共享密钥,所以以后进行数据传输就不需要用公钥和私钥了(之所以怕数据被截获,主要是钥匙的传输过程不安全),直接用各自的共享密钥进行数据的加密解密。