网络协议

在讲解HTTP协议之前,我们先了解下什么叫网络协议。不同的硬件,操作系统之间通信,如何去寻找目标,哪方先请求通信,怎么去结束通信,这些问题都需要一种事先确定好的规则来解决,即网络协议。网络协议常见的有 FTP、DNS、HTTP、HTTPS、UDP、TCP、IP、ARP、VLAN 等,分别位于应用层、传输层、网络层、链路层等,协议集合起来被称为 TCP/IP。当然现在有种说法,TCP/IP 指 TCP 和 IP 协议。

HTTP的问题

HTTP(HyperText Transfer Protocol,超文本传输协议)位于应用层,是为了解决文本传输问题而出现。协议规定报文字段、状态码等,且通信仅由客户端发起。其设计之初是为了共享文档和分享知识,但随着 Web 的高速发展,出现有以下问题:

  • 通信是使用明文
  • 不认证通信方的身份
  • 无法证明报文的完整性

    小飞:老婆,今晚我们做点有益身心健康的事情怎么样 老婆:害羞.jpg,你想干嘛 ——如果信息不加密,即如同在通信过程中裸奔

对称加密(共享密钥加密)

为了保证通信内容中敏感信息(密码,用户信息…)的安全,决定对通信内容进行加密。最先出现的加密方法是对称加密,用同一个密钥进行加密和解密。但如何安全的将密钥交给对方呢

小飞:老婆,我装B被别人打了,转10块钱到卡00给我看病 小强(拦截密钥,篡改):老婆,我被别人打住院了,转100块钱到卡11救命 老婆:好的,转了 ——密钥无法安全到达,身份无法确定,报文无法确定

非对称加密(公开密钥加密)

为了将密钥交给对方,出现了非对称加密,即通过公钥(私钥)加密,通过私钥(公钥)解密。公钥大家都可以知道,服务器将公钥发给客户端,客户端收到后,自己随机生成对称加密的密钥,用服务器的公钥来加密再返回给服务器,这样大家就可以用对称加密来传输数据了。但依旧有问题

小飞:老婆,我因为六亲不认的步伐又被人打了 老婆:等下,给你个公钥XX,你生成一个密钥,用公钥加密密钥返回给我再聊 小强(拦截公钥,篡改):等下,给你个公钥OO,你生成一个密钥,用公钥加密密钥返回给我再聊 小飞:好,@##%…… ——只要在第一次通信时拦截篡改公钥,身份验证和报文完整性问题依旧存在

HTTPS的诞生

HTTP协议受限已经无法解决这些问题,于是在应用层的HTTP协议之前加一层TLS协议(网景制定的SSL协议升级版,IETF主导),也就是HTTPS。通信过程中只有双方是无法确认身份的,那么需要引入第三方机构,且这个机构要让大家都信任。服务端将自身的域名、IP、公钥等交给第三方机构,第三方机构利用其私钥将服务器的公钥加密,并生产数字证书(如CA证书)。而第三方机构的公钥内置于浏览器或操作系统中,通过公钥解密验证数字证书,确定服务器身份。
image.png

以下为SSL握手流程:

  1. 客户端发送一个「ClientHello」消息,说明它支持的密码算法列表以及最高协议版本等必要的信息
  2. 服务器返回支持的SSL版本,加密算法列表,以及自己的证书等。如果客户端请求的资源需要认证,服务器请求客户端发送证书。
  3. 客户端首先验证服务器,如果认证失败,则断开连接,认证成功则执行下一步;
  4. 客户端发送pre-master secret(用服务器的公钥加密)和自己的证书(如果服务器需要验证身份)
  5. 服务器验证客户端,用自己的私钥得到pre-master secret,然后经过一系列步骤生成master secret。
  6. 客户端和服务器使用master secret生成对称密钥session key,之后传输的收据均使用session key加密解密。
  7. 客户端发送消息声明之后的数据用session key加密,并发送一条加密数据表明握手结束
  8. 服务器发送消息声明之后的数据用session key加密,并发送一条加密数据表明握手结束

image.png
上图来自《图解HTTP》
每条记录中数据和mac(指纹)均做加密处理。

  • 保密性:传输的数据均是采用session key加密,保证了保密性;
  • 真实性:双方握手时对对方的身份均有验证,因此可以保证对方的真实性
  • 完整性:每部分数据均有mac(Message Authentication Code)验证,验证时计算数据的mac然后与接收到的mac比较,即可确定数据是否完整。
  • 不可否认性:session key只有通信双方有,并且不在网络上传输,因此攻击者无法伪造使用session key加密的数据,所以具有不可抵赖性。

    小飞和老婆终于可以安心在网络聊天了

缺点

  • HTTPS协议由于各种加密解密,会加大CPU、内存等硬件资源的消耗
  • 数据变大,增加网络负载,比起HTTP速度慢2~100倍
  • 收费

结论

如果非敏感数据,可以采用HTTP

参考资料

  1. 《图解HTTP》
  2. SSL具体体现什么地方
  3. 什么是HTTPS协议?