HTTP缺点
HTTP主要有以下这些不足:
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
使用Java和PHP等语言开发的Web应用也可能会存在安全漏洞
HTTPS
HTTP加上加密处理和认证以及完整性保护后即是HTTPS
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
通常,HTTP直接和TCP通信,但使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。HTTPS就是身披SSL协议这层外壳的HTTP。
SSL是独立于HTTP的协议,所以不光是HTTP协议其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
SSL采用一种叫做公开秘钥加密的加密处理方式。近代的加密方法中加密算法是公开的,而密钥确实保密的,通过这种方式得以保持加密的安全性。
加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。如果密钥被攻击者获得,那加密也就失去意义了。
共享密钥加密的困境
加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密。
使用两把密钥的公开密钥加密
公开密钥加密方式很好地解决了共享密钥加密的困难。
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
另外,根据密文和公开密钥,恢复到信息原文是异常困难的。因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到的。
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。
所以应充分利用两者各自的优势,将多种方法组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
证明公开密钥正确性的证书
公开密钥加密方式无法证明公开密钥就是货真价实的公开密钥。为了解决这个问题,可以使用由数字证书机构(CA,Certificate Authority)和其相关颁发的公开密钥证书。
数字证书机构的业务流程:
首先,服务器的运营人员向数字证书机构提出公开密钥的申请。数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥后绑定在一起。
服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接称为证书。
接到证书的客户端可使用赎罪证书机构的公开密钥,对那张证书上面的数字签名进行验证,一旦验证通过,客户端便可明确两件事:一、认证服务器的公开密钥的是真实有效的数字证书认证机构。二、服务器的公开密钥是值得信赖的。
下图为仅使用服务端的公开密钥证书(服务器证书)建立HTTPS通信的整个过程。
HTTPS相较HTTP速度要慢
而且要进行HTTPS通信,证书是必不可少的。要使用证书必须向认证机构CA购买。