HTTPS详解

导读:本篇文章讲解 HTTPS详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、HTTPS 是什么

前面我们学习了HTTP协议:https://blog.csdn.net/yyhgo_/article/details/128433565?spm=1001.2014.3001.5501

HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引入了一个加密层。
HTTP 协议内容都是按照文本的方式明文传输的,这就导致在传输过程中容易出现一些被篡改的情况。

臭名昭著的 “运营商劫持”
下载一个 天天动听
未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接:
在这里插入图片描述
已被劫持的效果,点击下载按钮,就会弹出 QQ 浏览器的下载链接:
在这里插入图片描述
由于我们通过网络传输的任何数据包都会经过运营商的网络设备 (路由器、交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改。点击 “下载按钮”,其实就是在给服务器发送了一个 HTTP 请求,获取到的 HTTP 响应其实就包含了该 APP 的下载链接。运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成 “QQ浏览器” 的下载地址了!
在这里插入图片描述
不止运营商可以劫持,其他的黑客也可以用类似的手段进行劫持,来窃取用户隐私信息,或者篡改内容。

在互联网上,明文传输是比较危险的事情!
HTTPS 就是在 HTTP 的基础上进行了加密,进一步的来保证用户的信息安全!!!为了反制运营商劫持,为了提高网络上传输数据的安全性,HTTPS就被大规模普及了 ~~

如果当前加密的破解成本大于被保护信息的价值了,就认为是安全的 ~

二、“加密” 是什么

加密就是把 明文 (要传输的信息) 进行一系列变换,生成 密文
解密就是把 密文 再进行一系列变换,还原成 明文
在这个加密和解密的过程中,往往需要一个或者多个中间的数据来辅助进行这个过程,这样的数据称为 密钥

密码学的奠基人,也是计算机科学的祖师爷之一:艾伦·麦席森·图灵
在这里插入图片描述

三、HTTPS 的工作过程

既然要保证数据安全,就需要进行 “加密”。网络传输中不再直接传输明文了,而是加密之后的 “密文”。加密的方式有很多,但是整体可以分成两大类:对称加密非对称加密

3.1 引入对称加密

对称加密其实就是通过同一个 “密钥”,把明文加密成密文,并且也能把密文解密成明文。

最简单的对称加密:按位异或
a ^ b ^ b = a

在这里插入图片描述
引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了。

但事情没这么简单!服务器同一时刻其实是给很多客户端提供服务的,这么多客户端,每个人用的秘钥都必须是不同的 (如果是相同那密钥就太容易扩散了, 黑客就也能拿到了)。因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情 ~~

在这里插入图片描述

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是啥~

在这里插入图片描述

但是如果直接把密钥明文传输,那么黑客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了。
因此密钥的传输也必须加密传输!
但是要想对密钥进行对称加密,就仍然需要先协商确定一个 “密钥的密钥”。“先有鸡还是先有蛋” ?此时密钥的传输再用对称加密就行不通了。
就需要引入非对称加密!

3.2 引入非对称加密

非对称加密要用到两个密钥,一个叫做 “公钥”,一个叫做 “私钥”,公钥和私钥是配对的。
非对称加密最大的缺点就是运算速度非常慢,比对称加密要慢很多~~

可以:

  • 通过公钥对明文加密,变成密文
  • 通过私钥对密文解密,变成明文

也可以:

  • 通过私钥对明文加密,变成密文
  • 通过公钥对密文解密,变成明文

非对称加密的数学原理比较复杂,涉及到一些数论相关的知识。这里举一个简单的生活中的例子:
A 要给 B 一些重要的文件,但是 B 可能不在。于是 A 和 B 提前做出约定:B 说,我桌子上有个盒子,然后我给你一把锁,你把文件放盒子里用锁锁上,然后我回头拿着钥匙来开锁取文件。
在这个场景中,这把锁就相当于公钥,钥匙就是私钥。公钥给谁都行 (不怕泄露),但是私钥只有 B 自己持有。持有私钥的人才能解密 ~~

在这里插入图片描述

  • 客户端在本地生成对称密钥,通过公钥加密,发送给服务器;
  • 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥;
  • 服务器通过私钥解密,还原出客户端发送的对称密钥。并且使用这个对称密钥加密给客户端返回响应数据;
  • 后续客户端和服务器的通信都只用对称加密即可!由于该密钥只有客户端和服务器两个主机知道,其他主机 / 设备不知道密钥,即使截获数据也没有意义 ~~

由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密!!!

那么接下来问题又来了:

  • 客户端如何获取到公钥?
  • 客户端如何确定这个公钥不是黑客伪造的?

针对上述情况,黑客还是有办法进行入侵的?!中间人攻击:

在这里插入图片描述
这时就需要引入证书!!!

3.3 引入证书

在客户端和服务器刚一建立连接的时候,服务器给客户端返回一个证书

这个证书包含了刚才的公钥,也包含了网站的身份信息。

这个证书就好比人的身份证,作为这个网站的身份标识。
搭建一个 HTTPS 网站要在CA机构先申请一个证书 (类似于去公安局办个身份证) ~~

在这里插入图片描述

这个 证书 可以理解成是一个结构化的字符串,里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名

当客户端获取到这个证书之后,会对证书进行校验 (防止证书是伪造的) !!!:

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任 (操作系统中已内置的受信任的证书发布机构)
  • 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到一个 hash 值 (称为数据摘要),设为 hash1。然后计算整个证书的 hash 值,设为 hash2。对比 hash1 和 hash2 是否相等,如果相等,则说明证书是没有被篡改过的。

证书有一系列校验机制,黑客想要篡改证书,是很容易被客户端识别出来的。

3.4 完整流程

左侧都是客户端做的事情,右侧都是服务器做的事情 ~

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5 总结

HTTPS 工作过程中涉及到的密钥有三组:
第一组(非对称加密): 用于校验证书是否被篡改。服务器持有私钥 (私钥在注册证书时获得);客户端持有公钥 (操作系统包含了可信任的 CA 认证机构有哪些,同时持有对应的公钥)。服务器使用这个私钥对证书的签名进行加密。客户端通过这个公钥解密获取到证书的签名,从而校验证书内容是否被篡改过。
第二组(非对称加密): 用于协商生成对称加密的密钥。服务器生成这组 私钥-公钥 对,然后通过证书把公钥传递给客户端。然后客户端用这个公钥给生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥。
第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密。

其实一切的关键都是围绕这个对称加密的密钥。其他的机制都是辅助这个密钥工作的:

  • 第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器;
  • 第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥。

上面介绍的这一套 HTTPS 的 对称加密+非对称加密+证书 这套流程不是 HTTPS 独有的。其实这套机制属于一个专门的协议 SSL / TLS。
HTTPS = HTTP + SSL ~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118568.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!