知识点的梳理:
-
HTTP的不足:
- 通信使用明文,内容可能会被窃听;
- 不验证通信方的身份,因此有可能遭遇伪装;
- 无法证明报文的完整性,有可能已遭篡改;
-
通信使用明文可能会被窃取
-
HTTP本身不具备加密的功能,无法做到对通信整体进行加密。
- 按TCP/IP协议族的工作机制,通信内容在所有的通信线路(即互联网)上都有可能遭到窥视;
-
通信即使加密,也会被窥视到,只不过窥视到的是密文;
- 窃听相同段上的通信非常简单。只需要收集流动在互联网上的数据包(帧)就可以了。解析这些包的工作,可以交给抓包(Packet Capture)或嗅探器(Sniffer)工具;
-
加密处理防止被窃听,加密的对象有以下几个:
-
通信的加密:可通过SSL(安全套接层)或TLS(完全层传输协议)的组合使用,加密HTTP的通信内容;
-
用SSL建立安全铜线线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(超文本传输安全协议)或HTTP over SSL.
-
-
-
内容的加密:对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理;
-
- 有效加密的前提是,要求客户端和服务器同时具备加密和解密机制。主要应用在Web服务中。该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。
-
-
-
-
不验证通信放的身份就可能遭遇伪装
-
HTTP协议中的请求和响应不会对通信方进行确认;
- 也就是说,"服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端"等问题;
-
任何人都可发起请求
- HTTP协议通信不存在确认通信方的处理步骤,任何人都可以发送请求;
-
服务器只接收到请求,不管对方是谁都会返回一个响应(前提:仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下),这样会存在以下隐患:
- 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器;
- 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端;
- 无法确定正在通信的对方是否具备访问权限;
- 无法判定请求是来在何方,出自谁手;
-
即使是无意义的请求也会照单全收。无法阻止海量请求下的Dos攻击(拒绝服务攻击);
-
查明对手的证书
-
虽然HTTP协议无法确定通信方,但SSL可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,应用于确定方;
- 证书由信赖的第三方机构颁发,用以证明服务器和客户端是实际存在的;
-
伪造证书从技术角度来看是及其困难的;
- 客户端持有证书即可完成个人身份的确认,也可用于Web网站的认证环节;
-
-
-
无法证明报文完整性,可能已遭篡改
- 完整性是指信息的准确度。如果无法证明其完整性,通常也就意味着无法判断信息是否准确;
-
接收到的内容可能有误
-
HTTP协议无法证明通信的报文完整性,在请求或响应送出之后直到对方接收之前的这段时间内,如果请求或响应遭到篡改,是没有办法获悉的;
-
-
-
如何防止篡改
- 确定报文完整性常用的方法是MD5和SHA-1等散列值校验的方法,以及确认文件数字签名的方法;
-
提供文件下载服务的Web网站也会提供相应的以PGP创建的数字签名及MD5算法生成的散列值;
- PGP是用来证明创建文件的数据签名;
- MD5是单向函数生成的散列值;
- 这两种方式,都需要操作客户端的用户本人亲自检查,浏览器无法参与;
- 但是,如果PGP和MD5本身被改写的话,用户是没有办法意识到的;
-
综上,有必要使用HTTPS
- SSL提供认证和加密处理及摘要功能;仅靠HTTP自身确保安全性非常困难,应与其他协议组合达成目标;