HTTP协议的弊端
1、通信使用明文,内容可能被窃听
2、不验证通信方的身份,可能遭到伪装
3、无法证明报文的完整性,所以有可能内容遭到篡改
HTTPS协议
为了解决上述的问题,推出了HTTPS协议。HTTP协议加上加密和认证以及完整性保护之后就是HTTPS协议。
HTTPS不是应用层的新协议,只是HTTP通信接口部分用了SSL和TLS协议来代替。
通常,HTTP与TCP直接通信,HTTPS协议则先跟SSL协议通信,再由SSL和TCP通信,简言之 所谓HTTPS协议就是身披SSL外壳的HTTP协议罢了。
SSL介绍:
安全套接字(Secure Socket Layer,SSL)协议是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。
SSL是Netscape于1994年开发的,后来成为了世界上最著名的web安全机制,所有主要的浏览器都支持SSL协议
目前有三个版本:2、3、3.1,最常用的是第3版,是1995年发布的。
SSL协议的三个特性
① 保密:在握手协议中定义了会话密钥后,所有的消息都被加密。
② 鉴别:可选的客户端认证,和强制的服务器端认证。
③ 完整性:传送的消息包括消息完整性检查(使用MAC)。
对称加密:加密和解密都用同一个密钥的加密方式,称为共享密钥加密方式,也称对称加密。
在网络上转发密钥时,如果通信被监听,密钥就可能会落入到攻击者手中,这样也失去加密的意义。
非对称加密:公钥加密,私钥解密。也称公开密钥加密。这种方式 处理速度要慢。
HTTPS采用混合加密的方式。
1、服务器将公钥给客户端,自己保留私钥
2、客户端生成随机数,用公钥进行加密 传给服务器。服务器用私钥进行解密,获取随机数(非对称加密)
3、客户端后续使用随机数作为密钥加密传给服务器,服务器用同样的随机数进行解密(对称加密)
这里有一个问题,即客户端怎么确保服务器给的公钥是货真价实的公钥。如何证明公钥就是预想的服务器所要发布的公钥,会不会有攻击者中途篡改了公钥。
为了解决上述问题,可以使用由数字认证机构和其相关机构颁发的公开密钥证书。
业务流程:
1、首先服务器向数字认证机构提出公开密钥的申请。
2、数字认证机构判别其身份后,用自己的私钥对服务器的公开密钥进行签名并颁发公钥证书。
3、服务器将机构颁发的公钥证书发给客户端。
4、接到证书的客户端对证书上的签名进行验证。使用数字认证机构的公钥(预先内置在浏览器中)去验证公钥证书上的签名,一旦验证通过,便可确保公共密钥是可以信赖的。