12

HTTPS

简介

https并不是应用层的一种新协议,它只是HTTP通信接口部分用SSLTLS代替而已。通常,HTTP直接和TCP通信,现在则成为先和SSL通信,然后再由SSLTCP通信。简而言之,就是 批了 一层SSL的外壳而已。SSL采用的是公开密钥加密的方式。

对于https来说,采用公开密钥加密方式和共享密钥加密的混合方式来进行加密,如果能够实现密钥安全的交换,则可能会仅使用公开密钥加密的方式来通信。但是与共享密钥加密相比, 公开密钥加密的处理速度要慢。

证书的由来

公开密钥加密的方式还是存在一些问题的,比如,如何证明公开密钥本身就是货真价实的密钥, 很可能公开密钥中途就已经被替换掉了。因此需要由服务器和客户端都信赖的第三方办法的公开密钥证书。

服务器首先将这份由数字证书认证的公开密钥发送给客户端,客户端在接收到数字证书以

后,会对其上的数字签名进行验证,一旦验证,则可以确定,

认证服务器的公开密钥 , 是真实有效的数字证书认证机构;

服务器的公开密钥是值得信赖的。

当然,怎样将数字证书安全的传送给客户端呢?一般是浏览器本身就会植入常用机关的公开 密钥。

HTTPS通信的过程

客户端开始发送请求开始SSL通信,然后服务器会发送Certificate Request报文要求客户端 提供客户端证书。

客户端再将客户端证书已ClientCertificate报文的形式发送给服务器。

服务器端验证以后便可进行HTTP加密通信。

扩展

虽然Ajaxcomet协议能够提升浏览器的速度,但是并不能从根本上解决HTTP的瓶颈以及局限性。

局限性

  • 一条连接上只能发送一个请求
  • 请求只能从客户端开始。客户端不可以接收除响应以外的指令
  • 请求/响应首部未经压缩就发送。首部信息越大延迟越高
  • 发送冗长的首部,每次发送相同的首部会造成浪费
  • 可选任意格式的数据压缩形式,而非强制压缩

WebSocket

一旦web服务器与客户端建立起连接websocket的连接以后,之后所有的通信都依靠这个协议进行。但是仍然是建立在HTTP的基础上,为了实现websocket的通信需要用到HTTPUpgrade的首部字段,告知服务器通信协议发生了改变,已达到握手的目的。

握手请求会收到一个握手响应,返回状态码 101 Switching Protocol

django1.7+IIS+部署