在之前的文章中我们介绍了 HTTP 协议, 随着互联网的不断发展, 有越来越多的 “坏人”, 钻网络的漏洞来牟利.
HTTP虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的.
HTTPS 是在 HTTP 的基础上加入了 SSL, 可以简单将它理解成 HTTP 协议的安全版(不谈细节). 所以我们讲过的 HTTP 相关的知识, 在 HTTPS 中同样有效.
还不知道 HTTP 协议? 来看这篇 HTTP协议
关注收藏, 开始学习吧
HTTPS (Hypertext Transfer Protocol Secure), 是以安全为目标的 HTTP 通道, 在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性.
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.
HTTPS 也是一个应用层协议.
几年前在浏览器页面上尝试下载一个 天天动听.
未被劫持的效果, 点击下载按钮, 就会弹出天天动听的下载链接.
被运营商劫持后, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接.
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改.
点击 “下载按钮”, 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP 的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改成 “QQ浏览器” 的下载地址了.
那么运营商劫持的目的是什么呢?
当然是为了钱了, 每一次下载点击都可以给运营商提供盈利, 所以就会有了这种偷偷摸摸的事儿.
不止运营商可以劫持, 其他的网络黑客也可以用类似的手段进行劫持, 来窃取用户隐私信息, 或者篡改内容.
试想一下, 如果黑客在用户登陆支付宝的时候获取到用户账户余额, 甚至获取到用户的支付密码…后果将会是怎样的.
所以随着时代的发展, 人们意识到了安全的重要性. 也发现了在互联网上, 明文传输是比较危险的事情. 于是便有了 HTTPS, 在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全.
加密解密发展到如今, 计算机中, 有一个专门的分支学科, 叫做 “密码学”. 其本质上是从数学学科延伸过来的, 有很多数学上的知识. 其中就有对 “加密”, “解密” 等一系列操作的解释.
数据加密是一种将数据从明文(未加密)转换为密文(加密)的方法。 用户可以使用加密密钥访问加密数据,使用解密密钥访问解密数据。
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 “密钥”.
既然要保证数据安全, 就需要进行 “加密”.
网络传输中不再直接传输明文了, 而是加密之后的 “密文”.
加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密.
对称加密的加密流程, 简单说就是有一个密钥, 它可以加密一段信息, 也可以对加密后的信息进行解密, 和我们日常生活中用的钥匙作用差不多.
这把钥匙能把明文加密成密文, 也能把密文解密成明文.
每个客户端都需要有一把自己的对称密钥(不同客户端的密钥也要不同), 客户端生成了密钥, 需要把密钥传输给服务器, 让服务器知道这次通信的密钥是什么.
引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的真实内容是啥了.
如果通信双方都各自持有同一个密钥,且没有别人知道,这两方的通信安全当然是可以被保证的(除非密钥被破解)。
然而最大的问题就是这个密钥怎么让传输的双方知晓,同时不被别人知道。前面讲到由服务器生成一个密钥并传输给浏览器,那在这个传输过程中密钥被别人劫持到手了怎么办?之后他就能用密钥解开双方传输的任何内容了,所以这么做是当然不行的。
而浏览器也不可能做到预存好世界上所有HTTPS网站的密钥。现在怎么办?当下我们就需要使用非对称加密了。
简单来说非对称加密,就是有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。
公钥和私钥是配对的, 最大的缺点就是运算速度非常慢, 比对称加密要慢很多.
也可以反着用
上述我们使用非对称加密+对称加密的方法传输数据, HTTPS 基本就是采用了这种方案, 耗时的非对称加密解密操作只需要进行一次, 后续客户端和服务器通信都只用对称加密即可.
这样的方案看似完美, 实际上还是有空子可以钻.
再来简单看一下我们当前的方案:
此时有一个 “中间人” 来捣乱, 如果在数据传输过程中,中间人劫持到了数据,此时他的确无法得到浏览器生成的密钥X,这个密钥本身被公钥A加密了,只有服务器才有私钥A’解开它,然而中间人却完全不需要拿到私钥A’就能干坏事了。请看下面操作:
中间人一套 “狸猫换太子” 的操作,掉包了服务器传来的公钥,进而得到了密钥X。后续就可以肆无忌惮的干坏事儿了。根本原因是浏览器无法确认收到的公钥是不是网站自己的。
现实生活中,是如何证明某身份证号一定是小明的,可以看他的身份证,而身份证是由政府作证的,上面就有小明的身份证号,可以进行对比。
那能不能类似地有个机构充当互联网世界的“身份证”呢?让它作为一切证明的源头。
它就是CA机构,它是如今互联网世界正常运作的前提,而CA机构颁发的“身份证”就是数字证书。
网站在使用 HTTPS 前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。
在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书. 这个证书包含了刚才的公钥, 也包含了网站的身份信息.
当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的).
我们把证书原本的内容生成一份“签名”,比对证书内容和签名是否一致就能判别是否被篡改。这就是数字证书的“防伪技术”,这里的“签名”就叫数字签名.
明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了。那浏览器拿到服务器传来的数字证书后,如何验证它是不是真的?(有没有被篡改、掉包)
浏览器验证过程:
显然通过以上步骤,T’应当等于S‘,除非明文或签名被篡改。所以此时比较S’是否等于T’,等于则表明证书可信。
HTTPS 工作过程中涉及到的密钥有三组.
其实一切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥工作的.
第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器.
第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥
✨ 本文主要讲解了 HTTPS 协议的加密解密流程. 谈到了对称加密, 非对称加密方法, 以及HTTPS 最终使用的方法, 还谈到了数字证书的知识.
✨ 想了解更多计算机网络的知识, 可以收藏一下本人的计算机网络学习专栏, 里面会持续更新本人的学习记录, 跟随我一起不断学习.
✨ 感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习.
再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!