前一篇文章:计算机网络 —— HTTP 协议(详解)-CSDN博客
目录
·前言
一、HTTPS 协议简介
二、HTTPS 工作过程
1.对称加密
2.非对称加密
3.中间人攻击
4.引入证书
三、HTTPS 常见问题
1.中间人能否篡改证书?
2.中间人能否调包证书?
3.HTTPS 工作完整流程
·总结
·前言
前一篇文章中对 HTTP 协议整体做了一个基本介绍,在本篇文章里将介绍一下基于 HTTP 协议创造出来的 HTTPS 协议,关于 HTTPS 协议的重点内容就是它的一个工作过程,它是如何保证我们网络中传输数据的安全性呢?这将是本篇文章的要重点介绍的内容,下面就开始本篇文章的内容介绍。
一、HTTPS 协议简介
HTTPS 协议与 HTTP 协议一样都是应用层协议,HTTPS 协议是在 HTTP 协议的基础上引入了一个加密层,由于 HTTP 协议的内容都是按照文本的方式明文传输,这就导致在使用 HTTP 协议传输数据的过程中会出现一些数据被篡改的情况,比如:“运营商劫持”。
什么是 “运营商劫持” 呢?不知道有没有小伙伴在网上搜索某个软件点击下载后发现下的不是要下载的软件而是其他软件,这就是 “运营商劫持”,如下图所示:
如上图所示,当我们下载一个 “天天动听” 时,图1 未被劫持点击下载按钮是可以弹出正确的天天动听的链接,图2 已被劫持时,点击下载按钮,弹窗的是 QQ浏览器的下载链接,这就是 “运营商劫持”,那么它是如何做到的呢?流程如下图所示:
当然,不止运营商可以劫持,其他的 “黑客” 也可以用类似的手段来进行劫持,窃取用户的隐私信息,或者篡改内容,所以在互联网上,明文传输是比较危险的事情,HTTPS 就是在 HTTP 的基础上进行了加密,进一步来保证用户的信息安全。
解决安全问题最核心的要点就是 “加密”,什么是加密呢?加密就是把明文(要传输的真实数据)进行一系列变换,生成密文(针对明文加密之后得到的结果,往往不直观,不易理解),解密就是把密文通过一系列变换,还原成明文,在这个加密与解密的过程中,往往需要一个或者多个中间的数据来辅助完成这个过程,这样的数据就被称为 “密钥”。
二、HTTPS 工作过程
为了保证数据的安全,HTTPS 就在 HTTP 基础上进行 “加密” 操作,这样网络上传输的数据就不再是直接传输明文了,而是加密之后的 “密文”,加密的方式有很多,但是整体可以分为两大类:“对称加密” 和 “非对称加密”,下面我就来介绍一下 HTTPS 的工作过程,及遇到问题的对应解决方法。
1.对称加密
对称加密其实就是通过同一个 “密钥”,来把明文加密成密文,并且还可以把密文加密成明文,引入对称加密之后,即使数据被截获,由于黑客不知道密钥是什么,也就无法进行解密进一步去获取我们请求的真实内容了,引入对称加密后,此时数据传输过程如下图所示:
根据上述介绍可以发现对称加密具有以下特点:
- 使用对称加密,客户端与服务器需要使用同一个密钥;
- 不同的客户端需要使用不同的密钥(如果密钥都相同,那么黑客就可以获取密钥)。
此时,由于不同客户端使用的密钥都不相同,这就意味着服务器需要维护每个客户端和密钥的关联关系会引入很大的额外开销。
对称加密除了会引入额外的开销还有一个致命的问题,那就是这种加密并不安全,由于对称密钥是要传输给对方的,就意味着传输密钥的过程是明文传输的,那么此时黑客只要获取到传输的密钥,对称加密的操作就毫无意义了,如下图所示:
造成上图结果就是因为使用明文传输密钥,黑客就会获取到密钥,后续的加密操作就形同虚设了,所以我们需要对传输的密钥进行加密传输,如果我们对密钥仍进行对称加密的方式进行传输就需要确定一个 “密钥的密钥”,此时面临的问题还是 “密钥的密钥” 是明文,黑客仍然可以拿到密钥,所以对密钥进行加密传输使用对称加密的方式就行不通了,这就需要引入非对称加密。
2.非对称加密
使用非对称加密主要目的就是为了对 “对称加密” 的密钥进行加密,来确保对称密钥的安全性,在非对称加密中要用到两个密钥:“公钥” 与 “私钥”,公钥和私钥是配对的(公钥对明文加密变成密文,密文只能使用配对的私钥来进行解密),它们最大的缺点就是加密与解密的运算速度非常慢(消耗 CPU 资源),所以不能完全使用非对称加密来对传输的数据进行加密,而只是对“对称加密”的密钥进行加密。
引入非对称加密之后,就可以由服务器生成公钥和私钥,公钥可以公开给每个客服端,私钥只有自己知道,这样客户端就可以使用公钥对对称密钥进行加密然后传输给服务器,服务器获取到密文使用私钥解密获取到对称密钥,后面就可以继续使用对称加密来进行数据传输了,具体过程如下图所示:
下面我来对上述过程做一个梳理:
- 客户端在本地生成对称密钥,通过公钥加密,发送给服务器;
- 由于黑客没有私钥所以无法对截取的数据进行解密进而无法获取对称密钥;
- 服务器使用私钥解密,获取对称密钥,使用对称密钥加密给客户端返回的响应;
- 后续客户端与服务器的通信使用对称加密即可,由于该密钥只有客户端与服务器两个主机知道,所以黑客截获数据也无法进行解密。
上述过程虽然看起来安全,但是还有漏洞,由于公钥是需要客户端从服务器这边获取,那么就存在一个问题:获取的公钥是不是黑客伪造的?这就涉及到中间人攻击了。
3.中间人攻击
黑客通过中间人攻击就可以获取到对称密钥,由于非对称加密算法是公开的,所以黑客也可以使用非对称加密算法来得到自己的公钥私钥,此时就可以在客户端向服务器发送获取公钥的请求时进行中间人攻击,具体过程如下图所示:
下面我来对上述过程做一个梳理:
- 服务器使用非对称加密算法生成公钥:pub1,私钥:pri1;
- 黑客使用非对称加密算法生成公钥:pub2,私钥:pri2;
- 客户端生成对称密钥:key;
- 客户端向服务器发送请求询问公钥是什么?
- 服务器明文传输公钥 pub1 给客户端;
- 黑客截取数据,提取公钥 pub1 并保存,然后将数据中的公钥 pub1 替换成自己的公钥 pub2,并将伪造的数据发给客户端;
- 客户端收到数据,提取公钥 pub2(并不清楚公钥已经被换),用公钥 pub2 加密对称密钥 key,形成报文发送给服务器;
- 黑客截取数据,直接使用自己的私钥 pri2 进行解密,获取到对称密钥 key,再使用保存的服务端公钥 pub1 加密后,将报文发送给服务器;
- 服务器拿到报文后,使用私钥 pri1 进行解密,获取对称密钥 key;
- 后续服务器与客户端都使用 key 进行对称加密,进行通信,此时黑客就可以使用对称密钥 key 劫持数据对数据进行窃听或者修改。
那么如何解决中间人攻击这样的问题呢?最关键的一点就在于客户端拿到公钥的时候要有办法验证这个公钥是真的而不是黑客伪造的,这就需要服务器提供一个 “证书”。
4.引入证书
证书是一个结构化的数据,其中包含很多的信息,如:证书发布机构、证书有效期、公钥、证书所有者、签名……,服务器在使用 HTTPS 之前需要向第三方公正机构申请一份数字证书,然后服务器把证书传给浏览器,浏览器从证书中获取公钥就可以了,证书就相当于身份证,证明当前公钥的正确性。
在证书中,用来验证证书真伪的信息就是 “签名”,对于签名要详细介绍一下,这是通过证书解决中间人攻击问题的关键,签名的形成也是基于非对称加密算法的,当服务端申请证书的时候,公正机构就会对服务端进行审核,并专门为该网站形成数字签名,过程如下:
- 公正机构拥有非对称加密的公钥:A 和私钥:A*;
- 公正机构对服务端申请的证书明文数据进行 hash,形成数据摘要;
- 公正机构再对数据摘要用私钥 A* 加密,得到签名 S。
此时,服务端申请的证书明文与签名 S 就共同形成了证书,这样的证书就颁布给了服务端。这样就可以解决中间人攻击问题,此时数据传输的过程如下图所示:
图中客户端获取到证书对证书进行校验的过程如下:
- 判定证书有效期是否过期;
- 判定证书的发布机构是否受信任(操作系统中已经内置了受信任的证书发布机构);
- 验证证书是否被篡改:从操作系统中获取证书发布机构的公钥,对签名进行解密,得到 hash 值(数据摘要)设为 hash1,然后计算整个证书的 hash 值设为 hash2,对比 hash1 和 hash2 是否相等,如果相等就说明证书没有被篡改过。
三、HTTPS 常见问题
1.中间人能否篡改证书?
中间人无法篡改证书,理由如下:
- 中间人篡改了证书的明文,由于他没有公正机构的私钥,所以无法在 hash 之后使用私钥形成签名,那么就无法对篡改后的证书形成匹配的签名;
- 如果中间人强行篡改,客户端收到证书后在验证时就会发现证书明文的 hash 值与签名解密后得到的 hash 值不一样,就会发现证书被篡改,从而终止向服务器传输信息。
2.中间人能否调包证书?
中间人无法调包整个证书,理由如下:
- 中间人没有公正机构的私钥,所以无法制作假的证书;
- 中间人只能向公正机构申请真证书,然后使用自己申请的证书进行掉包;
- 但是证书中明文包含了域名等服务端认证信息,所以整体调包客户端依旧可以识别。
我们要知道,中间人没有公正机构的私钥对任何证书都无法进行合法修改,包括自己的。
3.HTTPS 工作完整流程
左侧是客户端要做的事,右侧是服务器要做的事,完整流程如下图所示:
·总结
文章到此就要结束了,本篇文章重点介绍了 HTTPS 的工作过程,在这里涉及到的密钥一共有三组,如下所示:
- 第一组(非对称加密):用于校验证书是否被篡改,服务器持有私钥(私钥在注册证书时获得),客户端持有公钥(操作系统包含了可信任的认证机构有哪些,同时持有对应的公钥),服务器使⽤这个私钥对证书的签名进行加密,客户端通过这个公钥解密获取到证书的签名,从⽽校验证书内容是否是篡改过;
- 第二组(非对称加密):用于协商⽣成对称加密的密钥,服务器生成这组 私钥-公钥 对,然后通过证书把公钥传递给客户端,然后客户端用这个公钥给⽣成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密的密钥;
- 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。
⼀切的关键都是围绕这个对称加密的密钥,其他的机制都是辅助这个密钥⼯作的,第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器,第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥,如果你认为读了本篇文章您有所收获,希望给本篇文章点个赞,收藏走一波,后面我会继续与大家分享计算机网络的相关知识,关注博主不迷路~~~您的支持就是我创作最大的动力,我们下一篇文章再见~~~