HTTPS的加密传输

        由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容)进行加密。即,HTTP 报文使用明文(指未经过加密的报文)方式发送。HTTP 协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求中 URI 真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。

        在 HTTP 协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的 IP 地址和端口号没有被 Web 服务器设定限制访问的前提下)。

因此存在以下问题: 

HTTP 协议的实现本身非常简单,不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下各种隐患。

  • 1、无法确定请求发送至目标的 Web 服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的 Web 服务器。
  • 2、无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
  • 3、无法确定正在通信的对方是否具备访问权限。因为某些Web 服务器上保存着重要的信息, 只想发给特定用户通信的权限。
  • 4、无法判定请求是来自何方、出自谁手。
  • 5、即使是无意义的请求也会照单全收。无法阻止海量请求下的DoS 攻击( Denial of Service, 拒绝服务攻击) 。       

        HTTP有以下三个缺点:无加密,无身份认证,无完整性保护,因此所谓的HTTPS,它其实就是HTTP+加密+身份认证+完整性保护。在通信接口使用了SSL(Secure Socket Layer,安全套接层)和TLS协议(Transport LayerSecurity,安全层传输协议而已。我们主要探讨的是这种安全机制是怎么实现的。HTTP通常直接和TCP通信,而HTTPS中HTTP先和SSL通信,再由SSL和TCP进行通信。模型如下: 

                                                                               

       需要注意的是,SSL协议并不是一个应用层协议,它是介于应用层和传输层协议之间的一个安全协议。通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的HTTP。

       在采用 SSL 后,HTTP 就拥有了 HTTPS 的加密、证书和完整性保护这些功能。SSL 是独立于 HTTP 的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTP和 Telnet 等协议均可配合 SSL 协议使用。可以说 SSL 是当今世界上应用最为广泛的网络安全术。

对称密钥加密

       SSL采用对称密钥进行加密,所谓的对称密钥,就是加密和解密都用同一个密钥,因此也叫做共享密钥加密。但是这种方法也有一个弊端,一旦密钥被第三方获得了,就可以对数据进行解密并窃取,因此这并不是一个完全安全的方法。事实上,如果加密解密方法十分简单,是很容易被第三方截取的。

      所以这种方法的缺陷就在于,如果一方不发送密钥,对方就无法利用密钥解密。另外,如果发送了密钥,但是密钥被第三方截取了,数据就容易被窃取。因此,需要一种方式,能够保证该密钥能够确保送到对方手中并且还不能够让第三方截取。 

非对称密钥加密

     SSL还采用了一种技术就是非对称密钥加密,所谓的非对称密钥,就是这是一对密钥,一个是私钥,一个是公钥。私钥不能让其他任何人知道,而公钥可以随意发布,任何人都可以获得到,因此这种加密方式也叫公开密钥加密。

     原理是这样的:

  •     客户端向服务器发起请求,服务器创建一对非对称密钥,将公钥返回给可客户端,自己保留着这个私钥而不发送;
  •     客户端收到了来自服务器的公钥,于是将自己的数据通过公钥加密,并返回给服务器;
  •     服务器接收到了客户端的数据,因为使用自己发送的公钥加密的,因此用自己的私钥对其进行解密,拿到数据;
  •     即使第三方拿到了加密后的数据,因为没有私钥,因此也无法获取到真实的数据。假如想要破解这个解密方式,是十分困难的。
         因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到。退一步讲,如果能对一个非常大的整数做到快速地因式分解,那么密码破解还是存在希望的。但就目前的技术来看是不太现实的。

HTTPS采用混合机制

      HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制

      公开密钥加密与共享密钥加密相比,其处理速度要慢。所以应充分利用两者各自的优势,将多种方法组合起来用于通信。具体如下:

对称密钥加密方式的优缺点:

  • 优点:处理速度快
  • 缺点:但是容易被第三方盗取

非对称密钥加密方式的优缺点:

  •  优点:更加安全,不容易被盗取
  •  缺点:处理效率相比对称密钥加密要慢,如果在通信时用这种方式加密,效率很低

于是HTTPS采用了两者的优点,使用了混合加密的方式

  •  使用非对称密钥加密的方式安全地交换后,再用对称密钥加密中的密钥;
  •  确保交换的密钥是安全的后,放弃非对称密钥加密,使用对称密钥加密来进行通信,保证传输效率

   一句话来说就是:在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

HTTPS使用的证书

       证明公开密钥正确性的数字证书:客户端无法判断自己收到的服务器的公钥是否是正确的,是否在服务器发送给客户端的过程中被第三方篡改了。

       为了解决上面的问题,服务器可以使用由数字证书认证机构(CA)颁发的证书,这种机构是客户端和服务器双方的第三方机构。服务器获取证书的流程如下:

  •     服务器运营人员向CA提出公开密钥的申请
  •     CA在判明申请者的身份之后,会对已申请的公开密钥做数字签名,然后将这个签名的公开密钥和放入公钥证书分配给服务器公司
  •     服务器会把这个由CA颁发的公钥证书以及公开密钥发送给客户端,以此来和客户端进行通信
  •     接收到证书的客户端可以使用公开密钥对证书上的签名进行认证,一旦认证通过,客户端就可以知道认证服务器公开密钥的是真实有效的CA,并且服务器的公开密钥是值得信赖的

    CA的公开密钥已经事先植入到浏览器中,客户端通过CA的公开密钥向CA认证服务器的公钥证书上的数字签名的真实性。

HTTPS是怎么解决HTTP协议的三大缺点的?

  • 防监听:采用对称加密对数据进行加密,采用非对称加密对对称加密的密钥进行加密
  • 防伪装:通信双方携带证书,证书有第三方颁发,很难伪造
  • 防篡改:采用摘要算法(MD5或是SHA-1),同样的数据由同样的摘要,而只要有一点不同的数据,它的摘要往往不同,只要数据做了篡改,就会被感知到。

HTTPS通信过程

  •  客户端向服务器发起SSL通信,报文中包含客户端支持的SSL的指定版本,加密组件列表(所使用的加密算法及密钥长度)
  •  服务器的响应报文中,包含SSL版本以及加密组件,服务器的加密组件内容是从客户端发来的加密组件列表中筛选出来的,服务器还会发一个公开密钥并且带有公钥证书
  •  客户端拿到服务器的公开密钥,并验证其公钥证书(使用浏览器中已经植入的CA公开密钥)
  •  如果验证成功,客户端生成一个Pre-master secret随机密码串,这个随机密码串其实就是之后通信要用的对称密钥,并用服务器的公开密钥进行加密,发送给服务器,以此通知服务器,之后的报文都会通过这个对称密钥来加密
  •  同时,客户端用约定好的hash算法计算握手消息,然后用生成的密钥进行加密,一起发送给服务器
  •  服务器收到客户端发来的的公开密钥加密的对称密钥,用自己的私钥对其解密拿到对称密钥,再用对称密钥解析握手消息,验证hash值是否与客户端发来的一致。
  •  如果一致,则通知客户端SSL握手成功之后的数据交互都是HTTP通信(当然通信会获得SSL保护),且数据都是通过对称密钥来加密(这个密钥不会每次都发,在握手的过程中,服务器已经知道了这个对称密钥,再有数据来时,服务器知道这些数据就是通过对称密钥加密的,于是就直接解密了)

HTTPS和HTTP的区别

    1)HTTPS更加安全,因为它有加密,身份认证,验证数据完整性等环节;
    2)HTTPS需要申请证书,要付费;
    3)加密通信需要消耗更多的cpu和内存资源,如果每次通信都加密,会消耗很多的资源,当访问量很多的那些网站在进行加密处理时,它们所承担着的负载就很多了,这个时候就需要服务器端实现负载均衡。(有专用的https加密、解密硬件服务器)
    4)使用端口不同,HTTP使用的是80端口,HTTPS使用的是443端口;
    5)所在层次不同,HTTP运行在TCP之上,HTTPS是运行在TCP之上的SSL/TLS之上的HTTP协议。

这篇博客写的不错,大家可以看看~~

https://blog.51cto.com/11883699/2160032

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值