图解HTTP-HTTPS笔记

一、HTTP的缺点

HTTP主要有这些不足:算法

  • 通讯使用明文(不加密),内容可能被窃听
  • 不验证通讯方的身份,所以有可能遭遇假装
  • 没法证实报文的完整性,因此有可能已遭篡改

二、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是当今世界上应用最普遍的网络安全技术网络

三、加密方式

1.共享密钥加密(Commom key crypto system),也叫作对称密钥加密并发

加密和解密同用一个密钥。在加密后密钥也会发送给对方,在通讯过程当中若是被监听那么密钥就会落入攻击者手中从而对信息解密性能

2.公开密钥加密(Public-key-cryptography),也叫作非对称密钥加密加密

使用一对非对称的密钥,私有秘钥和公有密钥。私有密钥不能让其余任何人知道,而公有密钥则能够随意发布。发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用本身的私有秘钥进行解密。利用这种方式,不须要发送私有秘钥,从而使信息安全接口

对称加密并不安全,而非对称加密虽然说安全度数高,但对CPU资源的消耗大,效率低,进而影响性能。HTTPS所采用的加密方式是结合二者的混合加密机制:在交换密钥环节使用非对称加密方式,在创建通讯交换报文阶段使用对称加密方式网络安全

使用对称加密生成的key对传输数据加密,而后使用非对称加密的公钥对key加密

  • 获取到非对称加密的公钥A
  • 使用对称加密的密钥B对数据加密
  • 使用公钥A对密钥B进行加密得密钥C
  • 将密钥B加密后的数据和密钥C通讯

四、证书

遗憾的是,公开密钥加密方式仍是存在一些问题:没法证实公开密钥自己就是货真价实的公开密钥。好比,正准备和某台服务器创建公开密钥加密方式下的通讯,如何证实收到的公开密钥就是本来预想的那台服务器发行的公开密钥,或许在公开密钥传输过程当中,真正的公开密钥已经被攻击者替换掉了

为了解决上述问题,可使用由数组证书认证机构和其相关机关颁发的公开密钥证书

数字证书认证机构处于客户端与服务器双方均可信赖的第三方机构的立场上

服务器会将由数字证书认证机构颁发的公钥证书(数字证书)发送给客户端,以进行公开密钥加密方式通讯。接到证书的客户端可以使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证经过,客户端即可明确两件事:认证服务器的公开密钥是真实有效的数字证书认证机构、服务器的公开密钥是可信赖的

五、HTTPS通讯步骤

  1. 客户端经过发送Client Hello报文开始SSL通讯。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的的加密算法及密钥长度等)
  2. 服务器可进行SSL通讯时,会以Server Hello报文做为应答。和客户端同样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
  3. 以后服务器发送Certificate报文,报文中包含公开密钥证书
  4. 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
  5. SSL第一次握手结束以后,客户端以Client Key Exchange报文做为回应。报文中包含通讯加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3的公开密钥进行加密
  6. 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文以后的通讯会采用Pre-master secret密钥加密
  7. 客户端发送Finished报文。该报文包含链接至今所有报文的总体校验值。此次握手协商是否可以成功,要以服务器是否可以正确解密该报文做为断定标准
  8. 服务器一样发送Change Cipher Spec报文
  9. 服务器一样发送Finished报文
  10. 服务器和客户端的Finished报文交换完毕后,SSL创建完成。通讯会受到SSL的保护,今后开始进行应用层协议的通讯,即发送HTTP请求
  11. 应用层协议通讯,发送HTTP请求
  12. 最后有客户端断开链接。断开链接时发送close_notify报文

2019.7.11更新 通俗来理解:

  1. 首先,客户端访问服务器。客户端会生成一个随机数A,把随机数A、支持的SSL版本号以及加密算法等信息发送至服务器
  2. 服务器接收到信息后,确认一下双方的加密算法。而后服务端也生成一个随机数B,并将随机数B和CA证书发送给客户端
  3. 客户端获得CA证书后,会去校验该CA证书的有效性。校验经过后,客户端生成一个随机数C,而后用证书中的公钥加密随机数C 并发送给服务端
  4. 服务端B获得加密后的随机数C,而后利用私钥进行解密,获得真正的随机数C
  5. 客户端和服务端都有随机数A、随机数B、随机数C,而后双方利用这三个随机数生成一个对话密钥。以后传输内容就是利用对话密钥来进行加解密了(利用了对称加密,通常用的都是 AES 算法)
  6. 客户端通知服务端,指明后面的通信用对话密钥来完成,同时通知服务器客户端的握手过程结束
  7. 服务端通知客户端,指明后面的通信用对话密钥来完成,同时通知客户端服务器的握手过程结束
  8. SSL的握手部分结束,SSL安全通道的数据通信开始.客户端和服务器开始使用相同的对话密钥进行数据通信

六、HTTPS不足

HTTPS也存在一些问题,如当使用SSL时,它处理速度会变慢 和使用HTTP相比,网络负载可能会变慢2到100倍,除去和TCP链接、发送HTTP请求以外,还必须进行SSL通讯,所以总体上处理通讯量不可避免地增长。因为SSL需加密传输,会更多地消耗资源

相关文章
相关标签/搜索