事物皆有两面性,HTTP也有不足,比如:
- 通信使用明文,内容可能被窃听
- 不验证通信方的身份,可能被伪装
- 无法证明报文的完整性,可能被篡改
为了有效防止这些弊端,HTTPS就应运而生了。
HTTPS
开门见山吧,HTTPS = HTTP + 加密 + 认证 + 完整性保护
HTTPS到底是如何实现的,这是我们要重点关注的。
首先,HTTPS不是应用层的新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。
通常,HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,就是身披SSL协议这层外壳的HTTP。
这里不得不提一下SSL协议,他是独立于HTTP的协议,所以其他运行在应用层的协议都可以跟SSL配合使用。SSL是当今世界上应用最广泛的网络安全技术。
在采用SSL后,HTTP就拥有了HTTPS加密、证书、完整性保护这些功能。
谈谈加密
共享密钥加密
近代加密方法中加密算法是公开的,而密钥是保密的,加密和解密都会用到密钥,没有密钥就无法对密码解密。
加密和解密同用一个密钥的方式称为共享密钥加密(Common Key crypto system),也叫做对称密钥加密。
如果发生密钥就有被窃听的风险,但不发送,对方就不能解密,再说,密钥若能够安全发送,那数据也应该能安全送达——这是矛盾的地方。
因为上述的矛盾,共享密钥加密是不安全的。
公开密钥加密技术
SSL采用一种叫做公开密钥加密的加密处理方式。
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥保密,公开密钥可以随意发布,任何人都可以获得。发送密文的一方使用对方的公开密钥进行加密处理。对方收到被加密的信息后,在使用自己的私有密钥进行解密。无需发送私有密钥,也就断绝了被盗走的可能。
从上图可以看到,私有密钥一直存在发送密文一方的服务器上,没有发送到网络中,所以就不会被窃听。
但这样做也是有局限的,因为公开密钥加密与私有密钥加密相比,其处理速度要慢。
HTTPS采用混合加密机制
HTTPS采用共享密钥和公开密钥加密两者并用的混合加密机制。
在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
公开密钥加密处理起来比共享密钥加密方式更为复杂,因此若在通信时使用公开密钥加密方式,效率就很低。
证明公开密钥正确性的证书
HTTPS的加密机制看似很完美,但还是存在一个致命的缺陷,那就是公开密钥是放在网上的,使用者证明公开密钥就是货真价实的公开密钥。
比如,正准备和某台服务器建立公开密钥加密方式的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥交换途中,真正的公开密钥已经被攻击者替换掉了。
数字证书认证机构
这就要借助第三方机构了,而且这个机构,必须是大家都信任的,这就轮到数字证书认证机构上场。
服务器的运营人员向数字证书认证机构提出公开密钥的申请,数字证书认证机构在判明提出申请者的身份后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。
接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端可以明确两件事:
一、认证服务器的公开密钥是真实有效的数字证书认证机构的。
二、服务器的公开密钥是值的信赖的。
这样以来,你就可以放心使用HTTPS了。