目录
HTTP的缺点
HTTP用户客户端和服务器进行通信,可以说是相当优秀。不过还存在着一定的问题
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法验证报文的完整性,所有有可能已遭篡改
1.通信使用明文可能会被窃听
HTTP报文使用明文方式进行传输。为了防止被窃听,主要可以通过加密技术进行解决。从两个方面进行考虑:
1. 通信的加密
一种方式就是将通信加密,HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容,用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了,与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)
2. 内容的加密
还有一种将参与通信的内容本身进行加密的方式,由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密,把HTTP报文中所含的内容进行加密处理,这就要求客户端和服务器,同时具备加密和解密的机制,但是内容仍有被篡改的风险
2.不验证通信方的身份就可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认,也就是不论是谁发送过来的请求都会返回响应。会存在以下隐患:
1.通信过程中,WEB服务器和客户端都有可能是伪装的
2.无法确定,正在通信的对方是否具有访问权限
3.无法判定请求是来自何方,出自谁手
4.即使是无意义的请求,也会照单全收,无法阻止海量请求下的DOS攻击(拒绝服务攻击)
关于这个问题,可以使用SSL进行解决。
虽然使用HTTP协议无法确定通信方,使用SSL,不仅提供加密处理,而且还使用一种被称为证书的手段,可用于确定方。
证书有值得信赖的第三方机构颁发用于证明服务器和客户端是实际存在的,另外,伪装证书从技术角度来说是一场困难的一件事,所以你只要能够确定通信方持有的证书,即可判断通信方的真实意图。
通过使用证书证明通信方就是意料中的服务器,这对使用者个人来讲,也减少了个人信息泄露的危险性,另外,客户端持有证书即可完成个人身份的认证,也可用于对WEB网站的认证环节。
3.无法证明报文完整性,可能已遭篡改
由于HTTP协议无法证明通信报文的完整性,因此在请求或响应发出之后,直到对方结束之前,这段时间内及时请求或响应的内容遭到篡改,也没有办法获悉。
虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷,可靠,其中常用的是MD5和SHA-1等散列值校验的方法,以及用来确定文件的数字签名方法。
HTTPS的引入
1. HTTP+加密+认证+完整性保护 = HTTPS
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议代替而已,通常HTTP直接和TCP通信,当使用,SSL时演变成先和SSL通信,再由SSL和TCP通信。
在采用SSL后HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能,SSL是当今世界上应用最为广泛的网络安全技术。
2. 相互交换秘钥的公开秘钥加密技术
SSL采用的是公开秘钥加密的加密处理方式。
1. 共享秘钥加密的弊端
加密和解密同用一个密钥的方式成为共享密钥加密,也被叫做对称密钥加密。以共享密钥方式加密是必须将密钥也发送给对方,可究竟怎么才能安全的转交?在互联网上转发秘钥时,如果通信被监听,那么秘钥可能落入攻击者之手,同时也就失去了加密的意义,另外还得设法安全的保管接受到的密钥
2. 使用两把秘钥的公开秘钥加密
公开密钥加密方式很好的,解决了共享密钥加密的困难,公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公开秘钥。使用公开密钥加密方式发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密,利用这种方式,不需要发送用来解密的私有密钥,也不必担心秘钥被攻击者窃听而盗走
3.HTTP采用混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合密机制。若秘钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信,但是公开密钥加密与共享密钥加密相比,其处速度要慢,所以应充分利用两者各自的优势,将多种方法组合起来通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段,则使用共享密钥加密方式。
4. 关于证书
公开密钥加密方式还是存在一些问题的,那就是无法证明公开密钥本身就是货真价实的公开密钥。这时候就可以使用由数字证书认定机构和其相关机关颁发的公开密钥证书进行证明
HTTPS的使用
通过以上的说明,说明HTTPS是一个安全可靠的协议,那么,为何所有的WEB网站不一直使用HTTPS?
其中一个原因是因为与纯文本通信相比,加密通信会消耗更多的CPU以及内存资源,如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。因此,如果是非敏感信息,则使用HTTP通信?只有在包含个人信息等敏感数据时,才利用https加密通信
第二个方面是可以节约购买证书的开销,要进行HTTPS通信证书是必不可少的,而使用证书必须向认证机构购买,对于那些购买证书并不合算的服务,以及一些个人网站,只可能只会采用http的通信方式
以上就是我理解的HTTP->HTTPS,望指正。