HTTPS
在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS 通信机制可以有效地防止这些问题。
1 HTTP的缺点
HTTP 主要有这些不足,例举如下。
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
这些问题不仅在 HTTP 上出现,其他未加密的协议中也会存在这类问题。
除此之外,HTTP 本身还有很多缺点。而且,还有像某些特定的Web服务器和特定的Web浏览器在实际应用中存在的不足(也可以说成是脆弱性或安全漏洞),另外,用Java和PHP等编程语言开发的Web应用也可能存在安全漏洞。
1.1 通信使用明文可能会被窃听
由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未经过加密的报文)方式发送。
1.1.1 TCP/IP 是可能被窃听的网络
按TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。
即使已经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信是相同的。只是说如果通信经过加密,就有可能让人无法破解报文信息的含义,但加密处理后的报文信息本身还是会被看到的。
窃听相同段上的通信并非难事。只需要收集在互联网上流动的数 据包(帧)就行了。像使用GET方法发送请求、响应返回了200 OK,查看HTTP响应报文的全部内容等一系列的事情都可以做到。
1.1.2 加密处理防止被窃听
在目前大家正在研究的如何防止窃听保护信息的几种对策中,最为普及的就是加密技术。加密的对象可以有这么几个。
1.1.2.1 通信的加密
一种方式就是将通信加密。HTTP 协议中没有加密机制,但可以通过和SSL或TLS的组合使用, 加密HTTP的通信内容。
用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。
1.1.2.2 内容的加密
还有一种将参与通信的内容本身加密的方式。由于HTTP协议中 没有加密机制,那么就对HTTP协议传输的内容本身加密。
即把HTTP报文里所含的内容进行加密处理。在这种情况下,客户端需要对HTTP报文进行加密处理后再发送请求。
由于该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。
1.2 不验证通信方的身份就可能遭遇伪装
HTTP 协议中的请求和响应不会对通信方进行确认。
1.2.1 任何人都可发起请求
在 HTTP 协议通信时,由于不存在确认通信方的处理步骤,任何 人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(若发送端IP未受限)。
会存在很多隐患,无法确定客户端信息,甚至DOS攻击。
1.2.2 查明证书
虽然使用 HTTP 协议无法确定通信方,但如果使用 SSL则可以。 SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是 实际存在的。通过使用证书,以证明通信方就是意料中的服务器。这对使用者个人来讲,也减少了个人信息泄露的危险性。另外,客户端持有证书即可完成个人身份的确认,也可用于对Web 网站的认证环节。
1.3 无法证明报文完整性,可能已遭篡改
所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。
1.3.1 接收到的内容可能有误
由于HTTP协议无法证明通信的报文完整性,因此,没有任何办法确认,发出的请求 / 响应和接收到的请求 / 响应是前后相同的。
请求或响应在传输途中,遭攻击者拦截并篡改内容的攻 击称为中间人攻击(Man-in-the-Middle attack,MITM)
为了有效防止弊端,有必要使用 HTTPS。SSL提供认证和加密处理及摘要功能。仅靠HTTP确保完整性是非常困难的,因此通过和其他协议组合使用来实现这个目标。
2 HTTP+加密+认证+完整性保护=HTTPS
2.1 HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
2.2 为什么不一直使用 HTTPS
既然HTTPS那么安全可靠,那为何所有的Web网站不一直使用HTTPS?
其中一个原因是,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。
因此,如果是非敏感信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。
除此之外,想要节约购买证书的开销也是原因之一。
要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认 证机构(CA)购买。那些购买证书并不合算的服务以及一些个人网站,可能只会选择采用 HTTP 的通信方式。