| |
|
开发:
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是如何加密的,是对称加密还是非对称加密?估计被问到,脑子都是无法直接反应,看完这篇博客再碰到这个问题,面试官直接给你发offer。 ? ? ? ? 要想搞清这个问题,让我们先了解对称加密和非对称加密。 ? ? ? ? 对称加密:加密使用的密钥和解密使用的密钥是同一个密钥? ? ? ? E(p,k1) = c? ????????D(c,k2) = p? ? ? ? k1 == k2 ? ? ? ? 对称加密的加密和解密的性能更好,核心的破绽是密钥传输的安全性 ? ? ? ? 非对称加密:加密和解密使用不同的密钥? ? ? ? E(p,k1) = c? ? ? ? D(c,k2) = p? ? ? ? k1 != k2 ? ? ? ? 非对称加密的密钥成对出现,称为密钥对(key pair),其中一个密钥是”自己“保留的,只有一份,称为私钥(private key);另一份密钥可以公开出去,称为公钥(public key)。 ? ? ? ? E(p,private key) = c? ? ? ? D(c,public key) = p ? ? ? ? 意味着”我“可以通过私钥加密数据,给任何拥有公钥的人,那么这些拥有公钥的人,可以通过手中的看懂”我“发出去的内容——但公钥的每个人都可以拿到,这种的加密还有什么意义? ? ? ? ? 意义在于防止伪造:因为只要可以通过公钥进行解密,说明这份消息一定是被于和公钥相对的私钥加密发送的。而私钥只有我有,说明这份消息一定是我发的,不是别人发的,类似于印章制度 ? ? ? ? E(p,public key) = c? ? ? ? D(c,private) = p ? ? ? ? 意味着谁都可以向我发送消息,通过公钥进行加密,但是只有我有私钥,只有我能看懂。 ? ? ? ? 非对称加密加密和解密的性能较差 下面来看看HTTPS的加密过程???????? 总结:对称加密主要用于真正的数据传输,非对称加密,主要为对称加密,解决对称加密的密钥传输的安全问题。 再来想一想中间还可能什么问题 中间人劫持问题?如果出现这种情况,数据的传输就如同明文传输,中间人完全可见。 这种问题,我们通过证书(CA)机制来解决 CA(Certification Authority)证书当局——类比现实生活中的公证处 由公证处给服务器颁发一个证书(类比营业执照,写明了服务器是谁,提供什么服务,公证处的签名),服务器的公钥存放在证书中,客户端收到的不仅仅是一个公钥本身,而是一套围绕着公钥建立的证明体系。 在这里引入一个知识: ????????消息摘要技术:目的是防止数据本身被篡改。广义上是哈希技术的一部分? ? ? ? 原始数据-->Hash(原始数据)-->摘要(哈希值),如果无意中,原始数据被改了,摘要就会发生改变,接收方验证摘要的正确性:Hash(原始数据)-->摘要,如果和发送方的摘要不同,就可以认为数据不是原始数据,被人篡改过。 消息摘要VS加解密技术 ? ? ? ? 加解密是可逆的。? ? ? ? 明文-->密文-->明文 ? ? ? ? 消息摘要是不可逆的。? ? ? ? 明文-->摘要? ? ? 再回到CA和签名流程中来 开始,服务器要找CA为它颁发证书,服务器需要提供自己的信息, CA制作证书,证书中包括域名为主的一系列信息,CA为服务器生成的密钥对中的公钥,然后为上述信息做为数据消息摘要的原始数据,使用CA的私钥对数据进行加密,生成证书和服务器的密钥对。 总结一下HTTPS的加密过程? ? ? ? 当客户端发起请求时,服务器把证书直接给到客户端 ? ? ? ? 客户端有CA机构的公钥,通过CA机构的公钥对证书进行解密 ? ? ? ? 客户端能解开,说明证书肯定是CA颁发,然后通过消息摘要算法,域名为主的信息+公钥信息生成新的摘要,和证书中的老摘要进行对比二次验证。 ? ? ? ? 最终拿到了服务器的公钥,按生成对称加密的密钥,通过服务器的公钥进行加密,传递给服务器。 ? ? ? ? 服务通过自己私钥进行解密,得到对称解密密钥 ? ? ? ? 双方使用对称加密,进行请求/响应的传输 |
|
网络协议 最新文章 |
使用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年11日历 | -2024/11/25 21:50:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |