https的工作流程

     在了解https之前,我们先看下http的协议有哪些不足,加密、证书,签名这些概念,以便于我们更全面的掌握https的原理以及工作流程。

     HTTP协议的不足

  •  不验证身份,导致身份可能被伪装。
  •  明文通信,数据可能被窃取
  •  无法验证报文的完整性,内容可能被篡改。

     一、通信加密

     1)为什么通信需要加密?

     解决数据被窃取问题。 因为HTTP不对通信内容进行加密处理,所以衍生了SSL加密技术协议,SSL采用混合加密(同时使用非对称加密和对称加密)的方式建立起安全的HTTP通信,经过加密后的内容即使被窃听了,窃听的人也无法解密对应的数据。

     2)公开密钥加密技术

     对称密钥加密和非对称密钥加密加密算法中加密算法是公开的,而密钥时保密的,加密和解密都需要密钥,没有密钥就不能解密,反之,如果密钥被截获,则加密的内容就有可能被破解。

     其中有三种加密机制:对称加密、非对称加密、混合加密

     1)对称加密

     对称加密是指加密和解密的密钥为同一个。

     问题:在通信时还需将密钥传输给对方用来解密,密钥传输过程中同样可能被截获,所以这种加密方式通信安全的前提是如何安全的传输密钥。

     2)非对称加密

     与对称加密不同,非对称加密的密钥是成对的(公钥和私钥)。

     这种方式又被称之为公开密钥加密,使用一对非对称的密钥,一把叫做公开密钥(public key),一把叫做私有密钥(private key),其中公开密钥可以随意发送,私有密钥必须保密。

     3)混合加密

     虽然非对称加密很安全,但是和对称加密比起来,它的解密速度非常慢;所以通常会用混合加密的方式进行通信,混合加密是用非对称加密的方式交换双方的对称加密秘钥,交换对称加密秘钥之后双方再用对称加密的方式进行通信。

     二、数字证书(解决身份伪装问题)

     这里要提到数字认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书,数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上,其具体的业务流程如下:

     1、服务器运营人员向数字证书认证机构提出公开密钥的申请。

     2、数字证书认证机构判明身份之后,会对已申请的公开密钥做数字签名,并将该公开密钥放入公钥证书后绑定在一起,服务器会将这份由数字认证机构颁发的公钥证书发送给客户端。

     3、客户端获取到数字认证机构颁发的公开密钥后,对其进行数字签名验证,一是确认公开密钥是真实的数字认证机构颁发的,二是确认公开密钥的值得信赖的。

     4、确认无误后,使用该公开密钥加密报文。

     5、服务器使用私有密钥进行报文解密。

     三、HTTPS

     1、什么是HTTPS?

     简单来说,HTTPS(HTTP Secure) 就是在 HTTP 协议基础之上加入加密以及认证机制的 HTTP。

     HTTPS 相较 HTTP 不是一种新协议,只是在 HTTP 通信接口部分使用了 SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议来实现。使得 HTTP 先与 SSL 通信,再由 SSL 和 TCP 通信,而不是 HTTP 直接与 TCP 通信。

     https的工作流程_数字证书

     2、HTTPS通信流程

     HTTPS通信主要包括几个节点,发起请求、验证身份、协商秘钥、加密会话,具体流程如下(此例子只有客户端对服务端的单向验证):

     1)客户端向服务端发起建立HTTPS请求。

     2)服务器向客户端发送数字证书。

     3)客户端验证数字证书,证书验证通过后客户端生成会话密钥(双向验证则此处客户端也会向服务器发送证书)。

     4)服务器生成会话密钥(双向验证此处服务端也会对客户端的证书验证)。

     5)客户端与服务端开始进行加密会话。

      具体流程如下:

      第一步:客户端向服务端发起请求

      a.  客户端生成随机数R1 发送给服务端

      b.  告诉服务端自己支持哪些加密算法

      第二步:服务器向客户端发送数字证书

      a.  服务端生成随机数R2;

      b.  从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成);

      c.  服务端生成把证书、随机数R2、会话密钥生成算法,一同发给客户端; 

      第三步:客户端验证数字证书。

      a.  验证证书的可靠性,先用CA的公钥解密被加密过后的证书,能解密则说明证书没有问题,然后通过证书里提供的摘要算法进行对数据进行摘要,然后通过自己生成的摘要与服务端发送的摘要比对。

      b.  验证证书合法性,包括证书是否吊销、是否到期、域名是否匹配,通过后则进行后面的流程

      c.  获得证书的公钥、会话密钥生成算法、随机数R2

      d.  生成一个随机数R3。

      e.  根据会话秘钥算法使用R1、R2、R3生成会话秘钥。

      f.  用服务端证书的公钥加密随机数R3并发送给服务端。

      第四步:服务器得到会话密钥

     a.  服务器用私钥解密客户端发过来的随机数R3

     b.  根据会话秘钥算法使用R1、R2、R3生成会话秘钥

     第五步:客户端与服务端进行加密会话

     1) 客户端发送加密数据给服务端

     发送加密数据:客户端加密数据后发送给服务端。

     2)服务端响应客户端

     解密接收数据:服务端用会话密钥解密客户端发送的数据;

     加密响应数据:用会话密钥把响应的数据加密发送给客户端。

     3)客户端解密服务端响应的数据

     解密数据:客户端用会话密钥解密响应数据;

      四、为什么有的网站不用HTTPS?

      HTTPS 虽然安全可靠,但是大多数网站还是使用 HTTP,原因是什么呢?

      1、HTTPS 由于使用了 SSL(包括 TLS) 而变得安全可靠,但是 SSL 由于要进行加密处理会导致整个通信变慢,频繁的加密、解密会消耗服务端和客户端的硬件资源。

      2、SSL 不仅会导致通信慢,还会由于大量消耗 CPU 和内存等资源,导致整个处理速度变慢,和 HTTP 相比,网络负载可能可能会变慢 2 到 100 倍

      3、如果使用了 HTTPS,那就意味着要增加硬件成本,此外从数字认证机构购买证书也是需要开销的。

      总结:相较于HTTP协议,HTTPS确保了报文的机密性以及完整性。HTTPS确保这些的依赖就是SSL/TSL协议,SSL/TSL安全协议搭配数字证书保证了报文在传输过程中的绝对安全。但是使用HTTPS就意味着需要增加成本,因此实际中是否使用HTTPS,还需要进行各方面的权衡。