对于HTTP协议主要有如下的不足的地方:
- 通信使用明文,内容可能会被窃听;
- 不验证通信方身份,因此有可能遭遇伪装;
- 无法验证报文的完整性,所以有可能已遭篡改;
1. 通信使用明文,内容可能会被窃听
在目前大家研究的如何防止通讯窃听保护信息的几种对策中最为普及的就是加密技术。加密的对象可以有通信的加密(服务器端和客户端之间先建立器安全的通信线路之后再开始通信)和内容的加密(对报文主体进行加密)。
再对内容加密的方法中,客户端和服务器端同时具备加密和解密机制。主要应用在Web服务中。需要注意的是由于这个方式不同于SSL或TLS将整个通信线路进行加密处理,所以内容会有被篡改的风险。
2. 不验证通信方身份,因此有可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求URI真正指定的主机,返回的响应是否真的返回到时机提出请求的客户端”等类似的问题。
虽然使用HTTP协议无法确定通信方,但是如果使用SSL协议则是可以的。SSL可哟提供加密处理,和一种被称为证书的手段,可用于确定方。具体过程为当客户端开始进行
3. 无法验证报文的完整性,所以有可能已遭篡改
由于HTTP协议无法证明通信的报文的完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或者响应的内容遭到篡改,也没有办法获悉。
4. HTTP+加密+认证+完整性保护=HTTPS
HTTP并非是应用层的一种新协议。只是HTTP通信接口部分使用了SSL和TLS协议代替了而已。通常HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信。
1 | +-----------+ +--------------+ |
HTTPS采用共享密钥加密(加密解密使用同样的密钥)和公开密钥加密(公开密钥加密,私有密钥解密)的混合加密机制。主要在交换密钥的环节使用公开密钥加密。
数字证书认证机构的业务流程为:首先服务器运营人员向数字证书认证机构提出公开密钥的申请。数据证书认证机构在确定申请人身份后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥公钥证书后绑定在一起。
服务器会将这份数字证书发送给客户端,已进行公开密钥的方式通讯。公钥证书叫做数字证书或者直接称为证书。
接收到证书的客户端可使用数字证书认证机构的公开密钥,对证书伤的数字签名进行验证,一旦验证通过,客户端便可以确定:1. 认证服务器的公开密钥的是真实有效的数字证书认证机构。2. 服务器的公开密钥是值得信赖的。证书有如下几个特点:
- 可认证组织真实行的EV SSL证书。
- 用以确认客户端的客户端证书。
- 认证机构信誉第一。
- 由自由认证机构颁发的证书称为自签名证书。
4.1 HTTPS的通信步骤
- 客户端通过发送ClientHello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
- 服务器可进行SSL通信时,会以ServerHello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选可支持的组件。
- 之后服务器发送Certificate报文。报文中包含公开密钥证书。
- 最后服务器发送ServerHelloDone报文通知客户端,最初阶段的SSL握手协商部分结束。
- SSL第一次握手接收后,客户端以ClientKeyExchange报文作为回应。报文中包含通讯加密中使用的一种被称为Pre-master secret密钥加密。该报文使用步骤3中的密钥加密。
- 接着客户端继续发送ChangeCipherSpec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
- 客户端发送Finished报文。该报文包含连接至今全部报文的整体检验值。这次握手能否成功,要以服务器能否正确的解密该报文作为判断依据。
- 服务器同样发送Finish报文。
- 服务器和客户端的Finish报文交换完毕后,SSL连接就算建立完成。当然,通信会受到SSL保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
- 应用层协议通信,即发送HTTP响应。
- 最后由客户端断开连接。断开连接时发送close_notify报文。
HTTPS比HTTP慢大概2到100倍,主要原因有两点:1. 服务器端要进行加密解密操作,会更多的消耗服务器和客户端的硬件资源。2. 除去TCP连接和发送HTTP请求还包含了SSL部分,因此整体上处理的通信量就不可避免的增加了。