一、HTTPS,确保Web安全
在HTTP协议中可能存在信息窃听或身份伪装等安全问题,HTTP的不足:
通信使用明文(不加密),内容可能会被窃听 |
不验证通信方的身份,因此有可能遭遇伪装 |
无法证明报文的完整性,所以有可能已遭篡改 |
1、通信使用明文可能会被窃听
HTTP本身不具有加密的功能,HTTP报文使用明文方式发送。另外TCP/IP协议的的通信机制,通信内容在所有的通信线路上都有可能遭到窥视。即使已经过加密
处理的通信,也会被窥视到通信内容。窃听相同段上的通信并非难事,只需要收集在互联网上流动的数据包(帧)就行了。
方案:加密处理防止被窃听
(1)、通信的加密(建立安全通信线路)
HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用
加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,
超文本传输安全协议)
(2)、内容的加密
由于HTTP协议没有加密机制,那就对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理。在这种情况下,客户端需要对HTTP
报文主体(body)进行加密处理后再发送请求。
2、不验证通信方的身份就可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认。也就是说存在服务器是否就是请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端
等类似问题。
(1)、任何人都可以发起请求
在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(也仅
限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)。因为不确认通信方,会存在以下各种隐患:
无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器 |
无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端 |
无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限 |
无法判定请求是来自何方、出自谁手 |
即使是无意义的请求也会照单全收。无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击) |
(2)、查明对手的证书
虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段可用于确定方。证书由值得信任
的第三方机构颁发,用以证明服务器和客户端是实际存在的符合资格的。
3、无法证明报文完整性,可能已遭篡改
(1)、接收到的内容可能有误
由于HTTP无法证明报文的完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。即
没有办法确认发出的请求/响应和接收到的请求/响应是前后相同的。
像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM),攻击人会随意篡改请求和响应,而
让客户端与服务器之间的通信看上去仍旧是正常的。
(2)、如何防止篡改
虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠、其中常用的MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。
如提供下载服务的Web网站也会提供相应的以PGP(Pretty Good Privacy,完美隐私)创建的数字签名及MD5算法生成的散列值。供用户检查验证下载的文件
是否就是原来服务器上的文件。可惜的是用这些方法也依然无法百分百保证确认结果正确,因为PGP和MD5本身被改写的话,用户是没有办法意识到的。所以
有必要使用HTTPS,SSL提供认证和加密处理及摘要功能。
HTTP+加密+认证+完整性保护=HTTPS
证书可证明服务器或客户端的身份,如我们会在Web登录和结算等使用HTTPS通信,使用HTTPS通信时,使用https://。
1、HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,
再由SSL和TCP通信了。所以说HTTPS是身披SSL外壳的HTTP。
SSL是独立于HTTP的协议,所以其他运行在应用层的协议如SMTP、Telnet均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
2、相互交换密钥的公开密钥加密技术
SSL采用一种叫做公开密钥加密的加密处理方式。
(1)、对称密钥加密方式需要将密钥发给对方,但是发送密钥的通信可能被监听使攻击人获取到密钥,另外还得想办法安全的保管接收到的密钥
(2)、使用两把密钥的公开密钥加密(非对称密钥加密),很好的解决了对称密钥加密的困难。双方各有一套配对的公钥和私钥,加密时双方交换公钥,
公钥加密,私钥解密;私钥加签,公钥验签。
(3)、HTTPS采用混合加密方式:即对称密钥加密和非对称密钥加密两者并用的混合加密机制。由于非对称加密和对称加密相比,其处理速度要慢。对称加密
速度较快但是密钥不能安全传输。
所以充分两者各自的优势,在对称加密的交换密钥环节使用非对称加密方式保证密钥的安全传输,在通信交换报文阶段则使用对称加密的方式。
3、证明非对称加密方式公钥正确性的证书
遗憾的是,公开密钥加密方式还是存在一些问题的。那就是无法证明公开密钥本身就是货真价实的公开密钥。如准备和某台服务器建立非对称加密方式下的通
信时,交换公钥后如何证明收到的公开密钥就是原本预想的那台服务器的公钥,可能在公钥传输途中,真正的公钥已经被攻击者替换掉了。
数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。数字证书认证流程:
(1)、服务器把自己的公开密钥登录至数字证书认证机构
(2)、数字证书认证机构用自己的私钥向服务器的公钥签署数字签名并颁发公钥证书给客户端
(3)、客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥(事先植入到浏览器中),像数字证书认证机构验证公钥证书上的数字签名,以
确认服务器的公开密钥的真实性
(4)、客户端使用服务器的公开密钥对报文加密后发送
(5)、服务器用私有密钥对报文解密。
即数字证书认证机构使用非对称加密方式对同样使用非对称加密的双方的交换公钥的公钥进行加密和加签保证公钥的正确性,只不过数字证书认证机构的公钥事先
植入在浏览器中,是可信的。
既然HTTPS安全可靠,为什么不一直使用HTTPS?
HTTPS比HTTP要慢2到100倍,比HTTP多了SSL通信,首先SSL通信慢,另外SSL通信还要大量消耗CPU及内存等资源。此外要进行HTTPS通信,证书必不可少,而
证书必须向认证机构(CA)购买,价格昂贵。
因此,如果是非敏感信息则使用HTTP通信,只有包含敏感数据时,才使用HTTPS加密通信。
原文地址:https://www.cnblogs.com/yangyongjie/p/11595350.html