专栏首页腾讯IVWEB团队的专栏HTTPS是如何保证加密可靠

HTTPS是如何保证加密可靠

前言

HTTP与HTTPS是开发人员最常接触的网络协议,通常在进行API请求的时候,我们会用到HTTP协议。但是众所周知HTTP是明文传输,所以是不够安全的,我们可以通过各种各样的网络抓包工具(如whistle/Fiddler)去“捕获”其中的具体内容,所以就引出了基于HTTP更加安全的HTTPS协议。

正文

概述

首先,HTTPS是一个既使用了对称加密又使用非对称加密算法,用一个恒等公式来表示HTTPS协议:HTTPS = HTTP + SSL。显然,公式表明HTTP协议和HTTPS协议之间的差别就是在这个SSL协议之上,所以也因此可以初步得出HTTPS的加密是通过SSL完成的。

加密手段

在详细解释HTTPS的加密过程之前,我们先谈谈常见的几种加密手段

对称加密

对称加密实质上指的就是加、解密使用的同是一串密钥,所以被称做对称加密。对称加密只有一个密钥作为私钥。 常见的对称加密算法:DES,AES等。

如果这个定义你并不是很理解,那么笔者就白话解释一下:

假设服务器叫小I,客户端叫小V。当小I和小V要进行一次加密传输时,他们知道他们的对话因为是明文传输,可能被外人窃听,于是就想到了加密传输。在每次发送数据前,小I会先给传输给小V一串密钥,小V接收到密钥,之后的过程,在每次数据传递时,发送方会用密钥进行加密,接收方会用这个密钥解密,也就是所谓的加密传输,也就在一定的程度上保障了安全性。

上面说到,只能够在一定程度上保障安全性,因为该加密算法在加密解密时都使用的同一个密钥。因为密钥是在所有数据传递之前进行传输,仍是以明文的方式传递,对于一些hackers截取到这些密钥就可以非常轻松的将后续的数据解开,所以也可以说,在某种程度上堆成加密其实跟明文加密查不了多少。

非对称加密

非对称加密指的是加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥,所以被称作非对称加密。公钥加密的信息,只有私钥才能解密。反之,私钥加密的信息,只有公钥才能解密。RSA就是最常见的非对称加密算法。

也跟对称加密一样,用一种形象的方法来解释一下非对称加密:

小I和小V都拥有两个密钥,一个为公钥,一个为私钥。公钥顾名思义就是可以给所有人公开的密钥,而私钥却只有自己知道。当需要进行数据传输时,利用公钥加密的数据只能通过对应的私钥解密。所以当小I向小V发送消息时,会用小V给它的公钥加密,当小V收到消息后,会使用该公钥对应的私钥进行解密。

但是,有这么一种情况(也就是所谓的中间人攻击),hackers在服务器发送给客户端公钥的时候,截取到了公钥(这里我们把服务器下发的公钥记为公钥A),hacker截取之后,向客户端发送一份自己下发的公钥(我们称为公钥B),当客户端给服务器发送数据时,就使用了公钥B加密,hackers截取后,通过私钥B进行解密就可以得到真实数据,再进行一定操作通过公钥A进行加密传送给服务器,服务器此时用私钥A解密后的数据也就并非客户端传来的数据了。

但是在传递过程中,使用非对称加密的速度肯定比非对称加密更慢(毕竟加密会麻烦一些)。所以在真正传输时,常常结合对称加密和非对称加密两种方法,通过非对称加密对密钥进行传输,再使用对称加密来对数据进行传输。并且按照上面所说,非对称加密也并非绝对安全,所以就引出了下面的数字证书。

CA数字证书

回归上一部分,非对称加密的根本原因就是因为客户端收到的公钥并不能够确定是否为服务器下发的公钥,因此,我们需要有一种策略方法来保证这把公钥是服务器发送而不是第三方,因此就引出了最终策略——数字证书。而这个数字证书,由一个具有公信力并且大家都认可的认证中心CA所下发。服务器在给客户端下发公钥的过程中,会把公钥以及服务器的信息通过hash生成一个摘要信息。同时,为了防止第三方调换,服务器会用CA提供的私钥对摘要信息进行加密,从而形成数字签名。最后连同最初未进行hash的信息生成一份数字证书。

当客户端收到数字证书时,会利用CA提供的公钥进行解密,得到摘要信息,通过对比解密的摘要信息以及未hash的信息,如果相同就证明是服务器下发。简而言之,就是利用一个第三方权威机构,去对公钥和私钥进行下发,从而保障了数据传递的安全性。

当然此时又有人会想,为何不能像中间人攻击一样,hackers去申请两份密钥达到一样的攻击效果?虽然可以利用浏览器对服务器证书检查的缺陷,通过伪造CA证书的方式,进行SSL中间人攻击。但实际上在这个过程中,现在主流浏览器都会弹出警告,SSL攻击就相当于失败了,因此从这个意义上讲,SSL协议依然是无法攻破的。但以上的警告页面中都可以找到继续访问该页面的方式,对于好奇心较强的用户,很可能会选择继续访问该页面而被SSL中间人攻击。

加密过程

说到HTTPS的加密过程,首先就说一下四次握手吧,先是四次握手的经典图片(虽然看过无数次但还是背不完标志位):

四次握手的主要步骤:

  1. 客户端请求建立SSL链接,并向服务端发送一个随机数和客户端支持的加密方法,比如RSA公钥加密,此时是明文传输。
  2. 服务端回复一种客户端支持的加密方法、一个随机数、授信的服务器证书和非对称加密的公钥。
  3. 客户端收到服务端的回复后利用服务端的公钥,加上新的随机数通过服务端下发的公钥及加密方法进行加密,发送给服务器。
  4. 服务端收到客户端的回复,利用已知的加解密方式进行解密,同时利用前三步生成的随机数通过一定的算法生成HTTP链接数据传输的对称加密。

相同,举一个现实形象一点的例子~

  1. 首先,我们(在客户端)打开了Tencent(服务器)。此时,我们的电脑(客户端)会生成一个随机数X,之后把X与自己支持的SSL版本号以及加密算法告诉给服务器。
  2. 然后,服务器收到信息后会选择一个双方同时支持的加密算法(第一步客户端会告诉服务器),同时生成一个随机数Y,之后把Y与CA下发的证书返回给客户端。
  3. 我们客户端这边在收服务器CA证书后,会先去验证数字证书的有效性(上文有讲,此处不赘述),确定后,就会生成一个随机数Z,利用证书中的公钥进行加密,并传给服务器。服务器在收到发来的加密随机数Z时,会利用CA下发对应的私钥解密,得到正确的随机数Z。
  4. 最后,服务器与客户端双方都拥有随机数X、Y、Z,然后双方同时利用这三个随机数来生成一个密钥(也就是对称加密的密钥)。

结尾

总的来说,HTTPS现在安全性已经很高很高的。虽然说在前些年,普遍认为HTTPS成本高,换来的效果仅仅是普通页面加密,并且当时国内大环境下这些普通页面似乎都没有太重视,还会拖慢速度,所以很多公司也就不想自己标新立异来做全站HTTPS了。但随着时间推移,现在HTTPS已经接入了很多公司的网站。个人观点他可能是善用了中间人攻击的思想,找到了一个“好的”中间人进行证书下发,从而大力控制了网络数据劫持。当然,未来肯定还有更多、更优的加密手段,但至少HTTPS在当今,大多数加密手段都难以望其项背了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 移动端 tryjs 异常捕获

    上周处理了一下群活动的 badjs ,第一步是摆脱` Script error .`,捕获异常栈,找到自己是错在哪里? 分享一下移动端 tryjs 异常捕获的步...

    腾讯IVWEB团队
  • JavaScript: 挑战函数式数据结构

    先前想在自己的 函数式方言解释器 里实现 元组 这种数据结构,但是没有什么方向,就去看了下 Scheme 的语法,看了下 Wiki,然后不知不觉间,看到了用 L...

    腾讯IVWEB团队
  • 小程序中神秘的用户数据

    上一篇文章手把手教会你小程序登录鉴权介绍了小程序如何进行登录鉴权,那么一般小程序的用户标识可以使用上文所述微信提供的jscode2session接口来换取,小程...

    腾讯IVWEB团队
  • 前后端API交互如何保证数据安全性?

    前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要...

    JAVA葵花宝典
  • 前后端 API 交互如何保证数据安全性?

    摘要: 原创出处 https://juejin.im/post/5b149754f265da6e155d4748 「猿天地」欢迎转载,保留摘要,谢谢!

    芋道源码
  • 前后端API交互如何保证数据安全性?

    前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要...

    猿天地
  • HTTPS协议原理和流程分析

    本文配图介绍HTTPS协议的层级结构,访问原理,交互过程,说明如何解决存在的中间人问题。

    辉哥
  • 前后端API交互如何保证数据安全性?

    前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要...

    黄泽杰
  • 前后端API交互如何保证数据安全性?

    前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要...

    纯洁的微笑
  • 完全图解 HTTPS

    我们先来看下数据在互联网上数据传递可能会出现的三个比较有代表性的问题,其实后面提到的所有方法,都是围绕解决这三个问题而提出来的。

    sunsky

扫码关注云+社区

领取腾讯云代金券