1、HTTP的缺点
HTTP主要有这些不足:
- 通信使用明文(不加密),内容可能被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
2、HTTPS
为了统一解决上述问题,在HTTP上再加入加密处理和认证等机制,成为HTTPS(HTTP Secure)
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替。通常HTTP直接和TCP通信,当使用SSL时,则变成先和SSL通信,再由SSL与TCP通信。
采用SSL后,HTTP就拥有了加密、证书和完整性保护这些功能
SSL是独立于HTTP的协议,不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最广泛的网络安全技术
3、加密方式
1.共享密钥加密(Commom key crypto system),也叫做对称密钥加密:
加密和解密同用一个密钥。在加密后密钥也会发送给对方,在通信过程中如果被监听那么密钥就会落入攻击者手中从而对信息解密
2.公开密钥加密(Public-key-cryptography),也叫做非对称密钥加密:
使用一对非对称的密钥,私有秘钥和公有密钥。私有密钥不能让其他任何人知道,而公有密钥则可以随意发布。发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有秘钥进行解密。利用这种方式,不需要发送私有秘钥,从而使信息安全
对称加密并不安全,而非对称加密虽说安全度数高,但对CPU资源的消耗大,效率低,进而影响性能。HTTPS所采用的加密方式是结合两者的混合加密机制:在交换密钥环节使用非对称加密方式,在建立通信交换报文阶段使用对称加密方式
使用对称加密生成的key对传输数据加密,然后使用非对称加密的公钥对key加密:
- 获取到非对称加密的公钥A
- 使用对称加密的密钥B对数据加密
- 使用公钥A对密钥B进行加密得密钥C
- 将密钥B加密后的数据和密钥C通信
4、证书
遗憾的是,公开密钥加密方式还是存在一些问题:无法证明公开密钥本身就是货真价实的公开密钥。比如,正准备和某台服务器建立公开密钥加密方式下的通信,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥,或许在公开密钥传输过程中,真正的公开密钥已经被攻击者替换掉了
为了解决上述问题,可以使用由数组证书认证机构和其相关机关颁发的公开密钥证书
数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上
服务器会将由数字证书认证机构颁发的公钥证书(数字证书)发送给客户端,以进行公开密钥加密方式通信。接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:认证服务器的公开密钥是真实有效的数字证书认证机构、服务器的公开密钥是可信赖的
5、HTTPS通信步骤
- 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的的加密算法及密钥长度等)
- 服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
- 之后服务器发送Certificate报文,报文中包含公开密钥证书
- 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
- SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3的公开密钥进行加密
- 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密
- 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准
- 服务器同样发送Change Cipher Spec报文
- 服务器同样发送Finished报文
- 服务器和客户端的Finished报文交换完毕后,SSL建立完成。通信会受到SSL的保护,从此开始进行应用层协议的通信,即发送HTTP请求
- 应用层协议通信,发送HTTP请求
- 最后有客户端断开连接。断开连接时发送close_notify报文
2019.7.11更新 通俗来理解:
- 首先,客户端访问服务器。客户端会生成一个随机数A,把随机数A、支持的SSL版本号以及加密算法等信息发送至服务器
- 服务器接收到信息后,确认一下双方的加密算法。然后服务端也生成一个随机数B,并将随机数B和CA证书发送给客户端
- 客户端得到CA证书后,会去校验该CA证书的有效性。校验通过后,客户端生成一个随机数C,然后用证书中的公钥加密随机数C 并发送给服务端
- 服务端B得到加密后的随机数C,然后利用私钥进行解密,得到真正的随机数C
- 客户端和服务端都有随机数A、随机数B、随机数C,然后双方利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了(利用了对称加密,一般用的都是 AES 算法)
- 客户端通知服务端,指明后面的通讯用对话密钥来完成,同时通知服务器客户端的握手过程结束
- 服务端通知客户端,指明后面的通讯用对话密钥来完成,同时通知客户端服务器的握手过程结束
- SSL的握手部分结束,SSL安全通道的数据通讯开始.客户端和服务器开始使用相同的对话密钥进行数据通讯
6、HTTPS不足
HTTPS也存在一些问题,如当使用SSL时,它处理速度会变慢 和使用HTTP相比,网络负载可能会变慢2到100倍,除去和TCP连接、发送HTTP请求之外,还必须进行SSL通信,因此整体上处理通信量不可避免地增加。由于SSL需加密传输,会更多地消耗资源