HTTPS(HTTP Secure)

HTTP+加密+认证+完整性保护=HTTPS

HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替

通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信

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

SSL采用公开密钥加密(Publick-key cryptography)的加密处理方式

加密和解密采用同一个秘钥的方式称为共享秘钥加密(对称加密)

公开密钥加密使用一对非对称的秘钥,一把不能让其他任何人知道的私有秘钥,一把可以随意发布,任何人都可以获得的公开秘钥。 使用公开密钥加密(非对称加密),发送密文的一方使用对方的公开秘钥进行加密处理,对方收到被加密信息后,在使用自己的私有秘钥进行解密

HTTPS采用混合加密机制

共享密钥加密和公开密钥加密两者并用的混合加密机制,若密钥能实现安全交换,那么有可能考虑仅使用公开密钥加密来通信,但是公开密钥加密比共享密钥加密处理速度要慢

所以,在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段使用共享密钥加密方式

证书

公开密钥加密方式还存在一些问题:无法证明公开密钥本身就是真实的公开密钥,无法证明收到的公开密钥就是原版预想的那台服务器发行的公开密钥,公开密钥在传输的过程中,可能已经被替换掉。

为了解决上述问题,使用由数字证书认证机构(CA)颁发的公开密钥证书。

所以完整的HTTPS认证过程是:

  1. 客户端提前内置CA的公开密钥
  2. 服务器把自己的公开密钥登陆至CA
  3. CA用自己的私钥向公开密钥部署数字签名并颁发公钥证书
  4. 客户端请求服务器时,拿到服务器的公钥证书后,使用内置的CA公开密钥,向CA验证公钥证书上的数字签名,确认服务器的公开密钥的真实性
  5. 客户端使用服务器公钥对报文加密后发送
  6. 服务器用私钥对报文解密

认证

确认用户身份

  • BASIC认证(基本认证)
  • DIGEST认证(摘要认证)
  • SSL客户端认证
  • FormBase认证(基于表单认证)

SSL客户端认证–银行、12306

SSL客户端认证借由HTTPS的客户端证书完成认证,需要先将客户端证书发给客户端,客户端必须安装此证书

SSL客户端认证采用双因素认证(Two-factor-authentication),SSL客户端证书是第一个认证要素,密码是另一个认证要素

FormBase认证(基于表单认证)–多数使用的认证方式

输入用户ID和密码等登录信息,发送给Web应用,基于认证结果来决定是否认证成功

由于HTTP是无状态协议,所以会使用Cookie来管理Session,弥补状态管理功能

  1. 客户端-登录信息->服务器,记录认证状态
  2. 服务器-Session ID(Set-Cookit:)->客户端,作为Cookie保存在本地
  3. 客户端-包含Session ID的Cookie:->服务端,验证Session ID判定是否是真实用户

通常,通过给密码加盐的方式增加额外信息,再使用散列函数计算出散列值后保存

基于HTTP的协议

HTTP的瓶颈

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

Ajax(Asynchronous JavaScript and XML)异步JavaScript与XML技术

利用JavaScript和DOM的操作,达到局部Web页面替换加载的异步通信手段

Ajax的核心技术是名为XMLHttpRequest的API,通过JavaScript的调用就能和服务器进行HTTP通信,可以从已经加载完毕的Web页面发起请求,只更新局部页面。

但是依然无法解决HTTP本身存在的问题(例如非强制压缩,相同首部等)

Comet

通过延迟应答,模拟实现服务端向客户端推送(Server Push)的功能,Comet会先将响应至于挂起状态,当服务器有内容更新时,再返回响应。

但是存在着一次连接持续时间变长,维持连接会消耗更多的资源等问题,同时也没解决HTTP本身存在的问题

SPDY

谷歌发布的,旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间。

SPDY并没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层直接通过新加会话层的形式运作,并且规定通信中使用SSL。使HTTP协议额外获得以下功能

  • 多路复用流
  • 赋予请求优先级
  • 压缩HTTP首部
  • 推送功能
  • 服务器提示功能

全双工通信的WebSocket

一旦服务器和客户端直接建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行,可以互相发送JSON、XML、HTML或图片等任意格式数据

主要特点

  • 推送功能
  • 减少通信量(一直保持连接状态,首部信息小)

连接过程

  • 连接开始时还是HTTP协议,所以由客户端先发起连接
  • 客户端:握手请求(Upgrade:websocket)
  • 服务器:握手响应(101 Switching Protocols)
  • 切换成WebSocket协议
  • 客户端服务端互相发送WebSocket独立的数据帧