作者:李成文;
标签: https
在HTTP协议中有可能存在信息窃听或身份伪装等安全问题,使用HTTPS通信机制可以防止这些问题。
HTTP的缺点
在前面我们深入的了解了HTTP协议,它有着许多优秀的地方,但是同时它也存在着一些不足。
HTTP协议的缺点:
- 通信使用明文(不加密),内容可能会被窃听。
- 不验证通信方的身份,有可能遭遇伪装。
- 无法证明报文的完整性,有可能在通信过程中被篡改。
当然这些问题并不是只在HTTP上面出现,在其他未加密的协议中也会有类似的问题。
通信使用明文的问题
HTTP本身是不具备加密的功能的,无法做到对通信整体进行加密,所以HTTP报文是使用明文的方式发送的。
按照TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到监视。因为互联网是由能够连同全世界的网络组成的,所以客户端与服务器通信的时,会经过许多不同的网络设备,这些设备不可能是个人的私有物品,所以在通信的每一个环节都有可能会遭到恶意窥视。
即使是经过加密处理的通信,也是会窥视到通信内容的,只是说由于加密了,别人在得到通信内容之后无法破解报文信息的含义而已,报文本身还是会被看到。
加密
一般在防止信息被窃听的对策中,最普遍的就是加密技术了,加密的对象有这么几个。
-
通信加密
在HTTP协议中没有加密机制,但是可以通过SSL或TLS的组合使用,加密HTTP通信内容。
使用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合的HTTP被称为HTTPS或HTTP over SSL。 -
内容加密
虽然HTTP协议中没有加密机制,但是我们可以对HTTP协议传输的内容本身进行加密。即把HTTP报文里所包含的内容进行加密处理。
对内容进行加密必须要保证客户端和服务端同时具备加密和解密的机制。但是由于这个方法不同于SSL或TLS将整个通信线路加密处理,所以内容依然会有被篡改的风险。
不验证通信方的身份的问题
HTTP协议中的请求和响应不会对通信方进行确认,也就是说任何人都可以对服务器发起请求,而且不管对方是谁都会返回一个响应。这样子会带来许多的问题:
- 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是伪装的Web服务器。
- 无法确定响应返回到的客户端是否是按真实意图接受响应的那个客户端,有可能是一个伪装的客户端
- 无法判断请求来自哪里
- 无法阻止海量请求下的DoS攻击
解决办法
虽然HTTP协议无法确定通信方,但是如果使用SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,用来确认对方的身份。
证书由值得信任的第三方机构颁发,用来证明服务器和客户端是实际存在的,伪造证书是非常困难的一件事,所以只要能够确认通信方持有的证书,就能够判断通信方的身份。
无法证明报文完整性的问题
所谓的完整性是指信息的准确度。如果无法证明信息的完整性,通常也就意味着无法判断信息是否准确。
HTTP报文发送出去之后,在传输的过程中有可能会被篡改,像这样,请求或响应再传输过程中,遭到攻击者拦截并篡改内容的攻击被称为中间人攻击。
如何防止篡改
虽然在HTTP协议中有确认报文完整性地方法,但是却并不便捷、可靠。其中常用的是MD5和SHA-1散列值校验的方法。
由于HTTP协议中的方法存在许多弊端,那么就有必要使用HTTPS来解决这些问题,SSL提供了认证和加密处理及摘要功能。
HTTP+加密+认证+完整的保护性 = HTTPS
我们把添加了加密及认证机制的HTTP称为HTTPS。
HTTPS就是披了SSL外壳的HTTP
HTTPS不是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议代替而已。
通常情况下,HTTP直接和TCP通信,但是使用SSL时,就变成了先和SSL通信,再由SSL和TCP通信,也就是所谓的HTTPS就是披了SSL外壳的HTTP。
采用SSL之后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
SSL是独立于HTTP的协议,不光是HTTP协议,其他运行在应用层的协议SMTP和Telnet等协议都可以配合SSL协议使用。
交换密匙的公开加密技术
SSL采用一种叫做公开密匙加密的加密处理方式,近代的加密方法中加密算法是公开的,但是密钥是保密的,通过这种方式来保持加密方法的安全性。
- 共享密钥加密的困境
加密和解密公用一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密,但是以共享密钥方式加密的时候必须将密匙也交给对方,如果通信被监听了,那么密匙也会被攻击者拿到,那么加密也就没有意义了。
- 两把密钥的公开密钥加密
公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公开密钥。私有密钥不能让任何人知道,公开密钥可以随意发布。
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密,对方收到被加密的信息后,再使用自己的私有密钥进行解密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。这样就不需要将用来解密的私有密钥发送出来了。
- HTTPS采用的混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密匙能够安全的交换,那么有可能会考虑仅使用公开密匙加密来通信。但是公开密匙加密与共享密匙加密相比,处理速度要慢。
所以充分利用两者的优势,将多种方法组合起来使用通信更好。
证明公开密匙正确性的证书
公开密匙加密存在一个问题,那就是无法证明公开密匙本身就是货真价实的公开密匙,有可能在传输的过程当中,公开密匙被攻击者给替换掉了。
为了解决这个问题,可以由数字证书机构和其他相关机关颁发的公开密匙证书。
HTTPS的安全通信机制
下面我们来看一下HTTPS的通信步骤:
- 客户端通过Client Hello 报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件。
- 服务器可进行SSL通信时,会以Server Hello报文作为回应,和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是由收到的客户端加密组件内筛选出来的。
- 服务器发送Certificate报文。报文中包含公开密匙证书。
- 最后服务器发送Server Hello Done 报文通知客户端,最初阶段的SSL握手协商部分结束
- SSL第一次握手结束后,客户端已Client Key Exchange报文作为回应。报文总包含通信加密中使用的一种被称为Pre-master secret的随机密码串。
- 接着客户端继续发送Change Cipher Spec 报文。该报文会提示服务器,在报文之后的通信采用Pre-master secret密匙加密
- 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手是否成功,要以服务器是否成功解密报文作为判断标准。
- 服务器发送Change Cipher Spec报文。
- 服务器同样发送Finished报文。
- 服务器和客户端的Finished报文交换完毕之后,SSL连接才算建立完成。通信会受到SSL保护,从此处开始进行应用层协议的通信,即发送HTTP请求。
- 应用层协议通信,即发送HTTP响应。
- 最后客户端断开连接,断开连接时,发送close_notify报文。
网友评论