1.HTTP的缺点
- 通信使用明文(不加密),内容可能会被窃听
1.按TCP/IP协议族的工作族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。
2.窃听相同段上的通信并非难事。只需要收集在互联网上流动的数据包就行了。对于收集来的数据包的解析工作,可交给那些抓包或嗅探器工具。
3.加密处理防止被窃听:
通信的加密:HTTP协议中没有加密机制,但可以通过和SSL或TLS的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。
内容的加密:对HTTP协议传输的内容本身进行加密。只会加密报文主体,而不会加密报文首部。
为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。 - 不验证通信方的身份,因此有可能遭遇伪装
1.HTTP协议中的请求和响应不会对通信方进行确认。
2.任何人都可发起请求
3.虽然使用HTTP无法确定通信方,但如果使用SSL则可以。SSL不仅提供了加密处理,而且还使用了一种被称为证书的手段,可用于确定方。
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。
通过使用证书,以证明通信方就是意料中的服务器。这对使用者来讲,也减少了个人信息泄露。
另外,客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。 - 无法证明报文的完整性,所以有可能已遭篡改
1.所谓完整性是指信息的准确度。
2.接收到的内容可能有误
由于HTTP无法证明通信的报文完整性。没有办法确认,发出的和接收到的是前后相同的。
请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)
3.如何防止篡改?
HTTP协议中常用的是MD5和SHA-1等散列值校验的方法,确认文件的数字签名方法PGP(Pretty Good Privacy 完美隐私)。
无论使用哪一种方法,都需要操纵客户端的用户本人亲自检查验证下载的文件是否就是原来服务器上的文件。浏览器无法自动帮用户检查。而且,用这些方法也依然无法百分百保证确认结果正确,因为PGP和MD5本身被改写的话,用户是没有办法意识到的
2.HTTP+加密+认证+完整性保护=HTTPS
- HTTP加上加密处理和认证以及完整性保护后即是HTTPS
- HTTPS是身披SSL外壳的HTTP
1.HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
2.当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。
3.SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。 - 相互交换秘钥的公开秘钥加密技术
1.加密和解密同用一个秘钥的方式称为共享秘钥加密,也被叫做对称秘钥加密。
以共享秘钥方式加密时必须将秘钥也发给对方,如果通信被监听那么秘钥就会被截取。
2.使用两把秘钥的公开秘钥加密:
公开秘钥加密使用一对非对称的秘钥。一把叫做私有秘钥,一把叫做公开秘钥。
发送密文的一方使用对方的公开秘钥进行加密处理,对方收到被加密的信息后,再使用自己的私有秘钥进行解密。利用这种方式,不需要发送用来解密的私有秘钥,也不必担心秘钥被攻击者窃听而盗走。
3.HTTPS采用混合加密机制:
HTTPS使用共享秘钥加密和公开秘钥加密两者并用的混合加密机制。在交换秘钥环节公开秘钥加密方式,之后的建立通信交换报文阶段则使用共享秘钥加密方式。 - 证明公开秘钥正确性的证书:
1.还存在一些问题:无法证明公开秘钥本身就是货真价实的公开秘钥。
为了解决上述问题,可以使用数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开秘钥证书。
2.数字证书认证机构的业务流程:
首先,服务器的运营人员向CA提出公开秘钥的申请。CA在判明提出申请者的身份之后,会对已申请的公开秘钥做数字签名,然后分配这个已签名的公开秘钥,并将该公开秘钥放入公钥证书后绑定在一起。 服务器会将这份由CA颁发的公钥证书发送给客户端,以进行公开秘钥加密方式通信。
接到证书的客户端可使用CA的公开秘钥,对那张证书上的数字签名进行验证。 - HTTPS的安全通信机制
1.客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度)
2.服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
3.之后服务器发送Certificate报文。报文中包含公开秘钥证书。
4.最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
5.SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。
6.接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
7.客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
8.服务器同样发送Change Cipher Spec报文。
9.服务器同样发送Finished报文。
10.服务器与客户端的Finished报文交换完毕之后,SSL连接就算建立完成。从此处开始进行应用层协议的通信,即发送HTTP请求。
11.应用层协议通信,即发送HTTP响应。
12.最后由客户端断开连接。断开连接时,发送close_notify报文。这步之后再发送TCP FIN报文来关闭与TCP的通信。
在以上流程中,应用层发送数据时会附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
使用SSL时,它的处理速度会变慢。一种是通信慢,另一种是指由于大量消耗CPU及内存等资源,导致处理速度变慢。因此如果是非敏感信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。