| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> HTTPS的加密过程 -> 正文阅读 |
|
[网络协议]HTTPS的加密过程 |
HTTPS是HTTP的孪生兄弟,HTTPS在HTTP的基础上,引入了一个加密层。 为什么要引入这个加密呢? 因为当年存在着臭名昭著的“运营商劫持”。 正常的下载情况: 被运营商劫持了的下载情况: 被劫持后这里下载了某Q浏览器,为什么呢?原因一目了然。 所以,为了避免这个问题,就引入了HTTPS,用来对传输数据加密。 对于加密,这里解释三个名词:
接下来,我们简单模拟一下加密的实现过程。 HTTPS中引入的加密层,称为SSL,或者最新也叫TLS 在其中,涉及的加密操作,主要是两种方式:
对称加密就是客户端和服务器都使用同一个密钥,这个密钥既能加密,也能解密。 在网络上传输的是密文,服务器收到密文后,需要用密钥解开。 但是如何保证客户端和服务器持有同一个密钥呢?尤其是一个服务器对应了很多客户端的时候。 这时就需要每个客户端都有一个不同的密钥,否则黑客很简单就能获取公共密钥。? ? 所以这里就需要客户端主动生成密钥给服务器,或者服务器生成密钥告诉客户端。 反正这个密钥会在网络上传输,如下:? 既然密钥都在网络上传输了,那么黑客又很简单获取了。 所以想要传密钥,还需要对密钥进行加密。 如何对密钥加密呢?这里就需要引入非对称加密。 非对称加密有两个密钥,分别叫做公钥和私钥。 公钥,人人都能看见,用来加密。私钥,只有自己才知道,用来解密。
在这里客户端和黑客都有公钥,只有服务器有私钥。 客户端可以用这个公钥,给密钥加密。这样黑客拿到密钥也没有私钥解密。 上述操作看似完美,但是任有缺陷,叫做“中间人攻击”。 首先,客户端会问服务器公钥是啥。 服务器会返回一个公钥。 在这个返回的途中,黑客可以自己生成一个公钥和私钥。 于是,黑客将自己的公钥返回给客户端,客户端拿这个公钥加密密钥后要传输出去。 黑客拿到后,就可以用自己的私钥来解密,于是拿到了密钥。 为了伪装,再用之前服务器的公钥给密钥加密,再给服务器。 服务器就不知道发生了啥,却“正常”地收到了看似没问题地密钥。 上述过程就是“中间人攻击”。 为了解决这个问题,关键就在于客户端要知道这个公钥是服务器的,不是伪造的。 于是就出现了第三方的公信机构,由他们给服务器一个独一无二的证书。 这样服务器传送公钥的时候,会一起把这个证书传给客户端。客户端看到证书才会加密。 黑客虽说也能仿造证书,但是证书也有认证机制,客户端也可以向公信机构求证。 有的客户端内部还自带公信机构的信息,这样就能进行本地认证,更加快速。 ? ??
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 11:28:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |