万字长文带你了解HTTPS原理

1 HTTP协议

1.1 HTTP协议的简单介绍

​ ​ ​ ​ ​ ​ ​ ​ 在正式将HTTPS之前,我们要简单介绍一下HTTP协议,什么是HTTP协议呢?我们知道,当我们要上网前,必须要先去运营商那里开通一下宽带,我们才能愉快地在网上进行冲浪。而运营商收了我们的钱之后,就会给我们拉一条线,这根线就是宽带(宽带只是一个泛称,我们平时接触的叫双绞线,是宽带的一种,另外还有很多种类的宽带,比如无线宽带等,这里就不再过多介绍),有了宽带,就可以把两台,甚至是多台计算机连了起来,这样就有每台计算机就在物理层面有了连接,也就是有了可以通信的基础条件(对应着计算机网络的物理层)。当然,只是简单的把计算机用宽带连了起来,还远远不能让但是之间进行通信,还需要做一些其他的事情才行。这中间的过程有点复杂,想要详细了解这一个过程的同学可以去学一下《计算机网络》这门课,我这里就简单的说一下两台电脑之间通信的流程,这里以我们常用的QQ聊天为例,涉及的角色用A和B代替,当A要给B发一个消息时,大概流程是这样的:

  1. A在他的QQ软件上写一条信息,然后点击一下发送按钮,把消息发送出去;
  2. A的计算机上的QQ软件将这条信息里面的内容交给A计算机的操作系统;
  3. A的计算机上的操作系统找到计算机上面的一个硬件:网卡,然后把这条信息交给网卡;
  4. 网卡再把这条信息交给宽带;
  5. 这条信息通过宽带把这条信息的内容传给B的计算机的网卡;
  6. 然后B的计算机的网卡再把这条信息交给B的计算机的操作系统;
  7. B的计算机的操作系统接受到这条信息之后,把这条信息交给B的QQ软件。

​ ​ ​ ​ ​ ​ ​ 至此,整个完整的通信流程就结束了,当然这里是很简单的描述了一下他的流程,通过上面的描述,我们可以知道,这里面有很多不同层面的东西要在一起协同工作,而要把这些东西完美的结合在一起,让他们协同工作,就需要制定很多的规范,这些规范也叫做协议。而HTTP就是期中一种协议,这种协议工作在应用层,也就是上面所说的QQ,现实中常见的实现了HTTP协议的应用还有浏览器微博等等。需要指出的是,不是每个应用都实现了HTTP协议,只有需要上网功能的才需要实现HTTP协议,比如记事本就不需要实现HTTP协议。
HTTP协议我们介绍完了,接下来我们就简单说一下它的缺点,HTTP诞生的时候,需要上网的人还不多,而且那个时候上网的人心思也比较单纯,并且在网上传输的信息也不是很很重要,所以它存在着一些风险,下面的图就是HTTPS和HTTP的简单对比。
在这里插入图片描述

HTTPS与HTTP的简单对比

1.2 HTTP协议的存在风险

​ ​ ​ ​ ​ ​ ​ ​ 这里用几个小例子简单解释一下信息劫持、信息篡改和信息窃听。

1.2.1 信息劫持

​ ​ ​ ​ ​ ​ ​ 正常情况下,浏览器应该是直接去访问正规服务器的,但是如果浏览器在访问正规服务器的过程中被黑客做了手脚,让浏览器就会去访问黑客的服务器,这个过程就叫做劫持,劫持的类型有很多种,下面的图中只画出了最常见的一种。
​ ​ ​ ​ ​ ​ ​ 举一个简单的例子帮助大家理解,当我们去车站去买票时,在半路的时候遇见了黄牛,然后被黄牛骗去了假售票处买了一张假票,黄牛把我们骗去假售票处的行为就是劫持。
在这里插入图片描述

信息劫持

1.2.2 信息篡改

​ ​ ​ ​ ​ ​ ​ 正常情况下,浏览器进行给服务器发送一个给张三转账10万块的请求,服务器接收到这个请求之后,给张三转10万块钱。但是这个请求被黑客拦截到了,并对请求的信息进行了修改,于是请求信息变成了给李四转账10万块,浏览器接收到这个请求之后,就给李四转了10万块钱,请求信息里面的收账人的名字被篡改了,这个过程就是信息篡改。图示如下:
在这里插入图片描述

信息篡改
​ ​ ​ ​ ​ ​ ​ 这个过程也可以举个现实中的小例子来帮助大家理解,小明和小红身处异地,小明给小红买了一串珍珠项链,通过快递寄给小红,但是在快递运输过程中,被快递员老王调了包,把珍珠项链换成了玻璃项链,这个把原始的东西替换掉的过程就是篡改。

1.2.3 信息窃听

​ ​​ ​ ​ ​ ​ ​ 正常情况下,浏览器进行给服务器发送一个给张三转账10万块的请求,服务器接收这个请求之后,这个请求的内容只有浏览器与服务器知道。但是这个请求被黑客拦截到了,并对请求的信息的内容进行了读取,于是除了浏览器和服务器之外,黑客也知道了请求里面的内容,这个过程就是信息窃听。图示如下:
在这里插入图片描述

信息窃听
​ ​ ​ ​ ​ ​ ​ 这里再举一个现实的小例子说明一下这个过程,小明在上课的时候写了一封情书给小红,然后在传给小红的过程中被小丽偷看了,所以小丽也知道了情书的内容,小丽偷看情书的行为就是窃听。

2 几个相关的技术

​ ​ ​ ​ ​ ​ ​ 前面我们简单介绍了一下HTTP以及它存在的一些缺点,既然HTTP存在着一些风险,那我们就要想办法来解决这些风险,而解决的方案就是HTTPS。那什么是HTTPS呢?在正式介绍HTTPS之前,我们还需要先认识几个的概念。

2.1 对称加密技术

​ ​ ​ ​ ​ ​ ​ ​对称加密指的就是加密和解密使用同一个密钥,所以叫做对称加密。对称加密只有一个密钥。常见的对称加密算法有:DES,AES,3DES等等。对称加密的特点是加密速度极快,但是因为加密和解密都是用同一个密钥的原因,所以如果要进行密钥分发的话,一旦被第三者截获之后,加密就没有了意义,第三者拿着这个密钥也可以对密文进行解密。所以在对称加密技术中,密钥的安全分发比较困难,存在密钥在分发过程中被人截获的风险。而且如果密钥过短的话,密钥容易被通过穷举法给破解出来。
在这里插入图片描述

对称加密

2.2 非对称加密技术

​ ​ ​ ​ ​ ​ ​ 非对称加密指的是:加密和解密使用不同的密钥,其中一把作为公开的、可以发给任何人的公钥,另一把作为只有自己才能知道的、需要自己谨慎保管、任何人都不能给的私钥。非对称加密的特点是:

  1. 公钥加密的信息,只有私钥才能解密。
  2. 私钥加密的信息,只有公钥才能解密。

​ ​ ​ ​ ​ ​ ​ 常见的非对称加密算法有:RSA,ECC等等 。
​ ​ ​ ​ ​ ​ ​ 非对称加密有一个严重的缺点:加密速度慢。而且每次加密长度也有限制,比如1024位Key的加密长度不能超过117Byte。
在这里插入图片描述

非对称加密
​ ​ ​ ​ ​ ​ ​ 这里有个地方需要注意大家注意一下,那就是:虽然可以私钥来加密数据,公钥进行解密,但是这个其实并不能起到对数据保密的作用,因为,公钥是公开的,可能有很多人拥有公钥,所以这个时候就起不到对数据保密的作用。但是由于私钥只有一个人会有,所以如果用A的公钥可以对密文进行解密,那么就说明这个密文一定是A发的,这个时候就起到了签名的作用。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020052410251480.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NjI5MDc4,size_16,color_FFFFFF,t_70)
非对称加密的两种作用

2.3 数字摘要

​ ​ ​ ​ ​ ​ ​ ​数字摘要就是指使用单向Hash(散列)函数将需要加密的明文摘要成一串固定长度的密文这一串密文,这串密文又称为数字指纹。这个密文的特点是,如果使用相同的单向Hash函数对他进行加密,它的长度是固定的,而且将不同的明文摘要成密文其结果总是不同的(哪怕原文只修改了一个标点符号它经过单向Hash函数运算得出的结果也是不一样的),而如果使用相同的Hash单向函数对同样的明文进行加密,其结果必定一致。常见的单向Hash(散列)函数有:MD5,SHA1等等。
在这里插入图片描述

数字摘要
​ ​ ​ ​ ​ ​ ​ 通过上图,我们可以看见,当将原文的10万修改成100万之后,经过单向Hash函数运算之后,所得到的结果(`信息摘要`)是不同的。所以数字摘要可以用于信息完整性校验的场景,用来验证信息是否被别人修改过。此外,当我们要对大文件(比如系统镜像)进行下载时,我们也可以使用数字摘要来验证我们下载的文件是否完整,确认一下在我们下载过程有没有因为网络波动的原因丢了一些什么东西。

3 几个简单的应用场景

​ ​ ​ ​ ​ ​ ​ 介绍完了几个相关的技术之后,我们接下来介绍几个结合了我们刚刚所介绍的技术的应用场景。

3.1 数字签名

​ ​ ​ ​ ​ ​ ​ 在正式介绍数字签名之前,我们可以看看下面的图。图中,正常情况下,赵总给小王发了一条消息,小王接收到消息之后,给李总转账。但是因为小王没有办法验证这个转账的消息是不是赵总发过来的,所以如果黑客给小王发了一个伪造的消息之后,小王就会把钱转给张三。而且在消息发送的过程中,还会有一种情况,那就是信息篡改,如果消息被黑客截获了并做了修改,小张因为无法辨别这个转账消息是否被修改过,这时候小王也会把钱转给张三。
在这里插入图片描述

信息伪造与信息篡改

​ ​ ​ ​ ​ ​ ​ 这个时候就需要引入一个叫做数字签名的技术了。数字签名是只有信息的发送者才能产生的、别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者所发送的信息真实性的一个有效证明,即可以验证这段数字串是否是由发送者所发出的 。一套数字签名通常使用两种互补的技术,一个用于签名(非对称加密技术),另一个用于验证信息的完整性(数字摘要)。数字签名是非对称加密技术数字摘要技术的相结合应用。
在这里插入图片描述

数字签名
​ ​ ​ ​ ​ ​ ​ 如上图所示,赵总在给小王发消息前,先把他的公钥交给小王,如果赵总要改小王发消息了,那赵总先将要发送的消息原文使用单向Hash函数生成一个数字摘要,然后使用他的私钥对生成的数字摘要进行加密(也就是签名),得到数字签名,然后把原文与数字签名进行打包,发送给小王。小王收到信息之后,先将打包信息分成两部分:数字签名和原文,然后使用王总的公钥对数字签名进行解密,如果能解密出来,则会得到一个`数字摘要1`,且可以证明这个信息是王总发过来的,这个时候小王还不能确定原文是不是被人篡改过,小王需要将原文使用和王总约定好的单向Hash函数对原文进行加密,生成一个`数字摘要2`,然后小王对这两个数字摘要进行对比,看一下值是否相等,如果相等,则说明原文没有被篡改过。这就是数字签名的整个工作流程,数字签名实现 了`完整性校验`和`身份验证`功能。

3.2 数字信封

​ ​ ​ ​ ​ ​ ​ 我们在前面介绍对称加密与非对称加密的时候,说了他们的优缺点:

  1. 对称加密技术加密速度很快,但是密钥分发困难,分发过程一旦被截获了,整个加密过程就变得没有了任何意义;
  2. 非对称加密技术加密速度很慢,但是只要我们将公钥分发出去就行了,不怕别人知道我们的公钥,公钥分发相对简单。

​ ​ ​ ​ ​ ​ ​ 既然如此,我们能不能设计一种技术,将这两种加密技术的优点都结合起来,把他们的缺点淘汰掉呢?这就诞生了数字信封技术。数字信封是指:将对称密钥通过非对称加密的技术分发对称密钥的方法,即发送方将原文用对称密钥加密,然后将对称密钥接收方公钥加密之后发送给接收方。具体流程如下图:
在这里插入图片描述

数字信封

​ ​ ​ ​ ​ ​ ​ 从图中可以看出,一开始的时候,赵总先使用一个随机数生成器,生成一个随机数作为对称加密使用的对称密钥,然后使用这个对称密钥来加密要发给小王的原文,得到一串原文加密之后的密文,同时赵总使用小王的公钥对对称密钥进行加密,得到一串对称密钥加密之后的密文,然后将原文加密之后的密文与对称密钥加密之后的密文组合在一起,打包发给小王。小王接收到了王总发给他的消息之后,先将打包好的信息进行拆分,得到赵总发过来的原文加密之后的密文对称密钥加密之后的密文,然后使用自己的密钥对对称密钥加密之后的密文进行解密,得到对称密钥,然后使用这个对称密钥对原文加密之后的密文进行解密,得到原文。这就是数字信封的工作流程,数字信封技术是结合了对称加密技术非对称加密技术两种技术的一个具体实现,它综合了性能与安全性的考虑。如果单单使用非对称加密的话,它的速度会很慢,如果只使用对称加密,那在密钥的分发过程中,就存在被窃听的风险。

3.3 CA机制

​ ​ ​ ​ ​ ​ ​ 经过前面的讨论,你是不是觉得有了数字信封,就可以完美的实现加密的安全通信了,遗憾的是,事实并非如此,还记得我们前面介绍的信息篡改吗?如果在小王获取赵总的公钥过程中,信息被篡改了,那这个时候,小王拿到的公钥就是黑客给他的假公钥,这时,如果小王用假公钥加密消息,黑客就可以对这个加密的密文进行解密了,在这种情况下,消息也无法保证机密性,而且即使赵总拿到了小王用假公钥加密的密文,赵总也无法对其进行解密。
在这里插入图片描述

公钥篡改

​ ​ ​ ​ ​ ​ ​ 所以,为了防止出现这种情况,就需要引入CA机制,CA就是一个证书服务机构,专门给我们颁发证书的,可以理解为类似国家教育部一样的权威机构,它给我们颁发的证书(比如:四六级证书),我们所有人都是信任并认可的。当我们使用公钥加密机制时,我们去找CA机构给我们颁发一个证书,这个证书是使用了CA机构的私钥来进行了加密(也就是签名)的。而为了保证CA机构的公钥在传输过程中被人篡改,我们直接把传输过程给砍掉,直接把CA机构内置到操作系统里面,这样就黑客就无法在传输过程中对CA机构的公钥进行篡改了,我们可以在Windows系统中,同时按住Windows + R键,在弹出的窗口中输入certmgr.msc,就可以看到如下图所示的页面了。
在这里插入图片描述

操作系统的证书

​ ​ ​ ​ ​ ​ ​ 为了方便理解,我们画图说明一下引入了CA机构后的公钥分发流程,图中的小王可以理解为我们的操作系统,赵总则是对应着服务器,具体如下图:
在这里插入图片描述
引入了CA机构后的公钥分发过程

​ ​ ​ ​ ​ ​ ​ 这里简单描述一下引入了CA机构后的公钥分发的流程,首先赵总去找CA机构申请一个属于他的证书,这个证书里面有赵总的公钥,还有赵总的身份信息以及使用赵总的公钥赵总的身份信息生成的数字签名,此外,CA机构还会把跟赵总的公钥配对的私钥给赵总,让赵总妥善保管。赵总拿到了证书之后,会把证书传给小王,小王收到了证书之后,会使用CA结构的公钥来解密证书里面的数字签名,然后如果解密出来了,就说明这个证书是CA机构颁发的,并且得到了一个数字摘要1,这个数字摘要是使用赵总的身份信息赵总的公钥生成的,但是这个时候,还不说明这个证书的内容,特别是赵总的公钥,有没有被替换过,小王先要看一下证书里面的身份信息是不是赵总的,如果是赵总的,再使用单向Hash函数将赵总的身份信息赵总的公钥来生成一个数字摘要2,然后对比数字摘要1数字摘要2是否相等,如果相等,证书里面的内容(特别是赵总的公钥)没有被替换过。这个流程中,其实除了多了CA机构这个东西之外,其它的步骤和思想就是我们前面所说的数字签名
​ ​ ​ ​ ​ ​ ​ 需要指出的是,引入了CA机构之后,我们还可以避免信息劫持。大家可以想一下,如果浏览器在请求服务器的过程中,这个请求被黑客劫持了,如果黑客没有证书,那黑客服务器所发送的消息就无法通过浏览器的认证,这时浏览器就可以终止这一次请求。如果黑客伪造了一个假的证书,因为这个假证书是无法使用CA机构的私钥进行签名的,浏览器无法使用CA机构的公钥对这个假证书的签名内容进行解密,所以也无法通过身份认证。如果黑客也去CA机构申请了一个属于他的证书B,用证书B来替换掉正规服务器的证书是不是可以呢?我们仔细思考后发现,也是不行的,因为证书里面还有服务器的身份信息(对应着服务器的域名),所以在浏览器在进行完整性校验时,黑客的证书B是无法通过校验的。

向CA机构申请证书的时候,CA机构是会对申请人的身份进行验证的,具体方法的验证方法,等下在HTTPS的图中会说到。

4 HTTPS

​ ​ ​ ​ ​ ​ ​ 前面铺垫了那么多,终于要到我们的主角HTTPS了,如果你对前面的知识已经了解了,那么,我相信只要我把图给贴出来,你就可以了解它的工作原理了。不信的话,看图:
在这里插入图片描述

HTTPS原理

​ ​ ​ ​ ​ ​ ​ 其实这块已经没有什么好说的了,我个人人为我这个图已经画得比较清晰了,图中每个模块的详细过程都可以在前面所讲的技术中所列出的图中找到。HTTPS其实就是对前面所讲的各种技术的进行了非常巧妙组合而得到的一个技术产物,这里面需要指出的是,图中出现了三个随机数,这三个随机数其实是因为计算机产生的随机数是一个假随机数,所以为了避免出现每次产生的随机数都一样的情况,使用了三个随机数来生成对称密钥,为什么是三个随机数呢?其实这是在实践过程中得出的一个结果,人们发现三个随机数已经可以满足需求了(这里指出一点,我们在设计某一个技术算法的时候,其实大多数时候我们会发现,功能和性能往往是不能兼得的,所以我们需要在两者之间找到一个平衡点,这里的随机数是一个例子,数字信封也是一个例子)。还有一点,图中服务器与浏览器交互的线其实就是TLS/SSL的握手过程,我这里只是列出了关键的几部,更详细的过程大家可以自行去网上查阅相关资料,因为时间与篇幅原因,我这里就不再赘述了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章