HTTP+加密+认证+完整性保护=HTTPS
最近在看《图解HTTP》总结了一下HTTPS。
基础决定你可能达到的高度,而业务决定了你的最低瓶颈,两者不可偏颇。——技术最前沿
加密
通常, HTTP协议承载于TCP协议之上,HTTPS则在HTTP和TCP之间添加一个安全协议层SSL(Secure Socket Layer)、TSL(Transport Layer Security)。当使用SSL时,则变成先和SSL通信,再由SSL和TCP通信。
非对称加密
SSL使用两把密钥进行加密。公开密钥随意发布。发送密文的一方使用对方公开的密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
总结:这种加密比较复杂不容易被破解,但是需要复杂的通信方式。无法证明公开密钥本身就是货真价实的公开密钥(后面会介绍https解决方案)
对称加密
共享密钥:加密解密使用共同的一套秘钥。
总结:这种加密简单但是特别容易被破解。如果攻击者使用“中间人攻击”即在通信的时候监听你的拦截你的通信信息,就可以知道你发送的秘钥。
公开密钥加密处理起来比共享密钥加密更为复杂,因此若在通信时使用公开密钥加密的方式,效率就很低。
HTTPS采用混合加密。在交换密钥环节使用公开密钥加密方式,之后建立的通信交换报文阶段则使用共享密钥加密方式。示例:https->(验证时期)采用公共秘钥加密->(通信时期)采用共享秘钥加密通信
认证
上面说道了公开加密的缺点:使用公开密钥存在一个问题:无法证明公开密钥本身就是货真价实的公开密钥。
为了解决此问题,可以使用由数字证书机构CA和其相关机构颁发的公开密钥证书。
在申请到数字证书之后,服务器在收到通过HTTPS的访问请求时,会将这份由认证机构颁发的公钥证书发送给客户端。
接到证书的客户端可以使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:一,认证服务器的公开密钥是真实有效的数字证书认证机构。二,服务器公开密钥是值得信赖的。
为了保认证机构的公开密钥安全转交给客户端,多数浏览器选择在内部植入常用认证机关的公开密钥,问题得以解决。
完整性保护
HTTPS的通信步骤较HTTP复杂很多,在完整性保护方面,应用层发送数据时会附加MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。