| |
|
开发:
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加密原理 |
? HTTP是未经加密的协议,其内容是以明文的方式传输的,也就是说,在传输过程中有可能被劫持、篡改,造成信息泄露等安全问题,所以我们需要安全的请求方式进行请求,也就是我们经常使用的HTTPS。 ? HTTPS并不是应用层中一个新的协议,仅仅是在 应用层 和 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL 通信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL协议这层外壳的 HTTP。 ? 接下来我们就来探究一下HTTPS(SSL/TLS)的加密机制,参考自: 彻底搞懂HTTPS的加密原理 - 知乎 1、首先了解一下最初的加密方法 -- 共享密钥加密(也叫对称密钥加密): ? 简单来说就是加密、解密共用同一个密钥,但这种方式是存在缺陷的。因为HTTP是明文传输,如果服务器生成的秘钥在传输给客户端的过程中就可能会被第三者劫持到,这样获取到秘钥的第三者就可以对双方的请求、响应进行解密,也就失去了加密的意义。所以,密钥安全地转交、以及密钥的保管是该加密方法存在的一些问题。 2、为了解决共享密钥加密中存在的问题,又提出了 -- 公开密钥加密(也叫非对称加密): ? 简单来说就是有两把密钥,一把叫做私有密钥 (private key),另一把叫做公开密钥(public key),私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。公钥加密的内容必须用私钥解密,同样私钥加密的内容只能由公钥解开,这样我们就不用担心密钥是否安全地转交给了对方,貌似看起来也足够安全(其实不然)。 ? 一般地,由服务器先把公钥以明文的方式传输给浏览器,此后,浏览器发送的请求都将以公钥进行加密,服务器在接收到请求后再使用私钥进行解密,这样浏览器的请求无论如何都不会被第三者进行获取(前提是服务器私钥没有泄露)。但服务器在传输公钥的过程中,倘若公钥被第三者劫持,那么服务器传输的数据就会被第三者拿公钥进行解密获取,所以当前加密方式只能保证 浏览器->服务器 这一条路线是安全的,服务器 -> 浏览器还存在安全问题。 3、既然一组公钥、私钥可以保证单个方向进行安全传输,那么两组公钥、私钥是否就可以保证双向安全传输呢? 过程如下:
? 这样可以解决上述问题,但是HTTPS最终并没有使用该加密方式,因为非对称加密算法非常耗时,而对称加密却很快,所以最终的加密方式采用了非对称加密+对称加密,这样非对称加密、解密各只需用一次即可。 过程如下:
4、看似完美的方案,其实还存在缺陷: ? 混合加密的过程中需要服务器将其公钥传输给浏览器,但是能确保浏览器拿到的公钥就是所要访问的服务器的吗?倘若是被掉包了呢?比如:
? 所以说,必须要确保浏览器获得的公钥是值得信任的。 5、数字证书 ? 为了解决冒充服务器的问题,CA机构(数字证书认证机构)出现了。 ? 网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。 6、那么问题又来了,数字证书在传输的过程中倘若被篡改了呢? ? 使用数字签名技术可以解决这个问题,但是就我目前而言,先有大概的了解就行,日后若需要再来学习总结~ 总结: ??? 关于HTTPS加密机制的学习可谓是一环扣一环,对我而言收获很大。同时体会到一种方案的提出并不一定就是完美的,需要不断去完善,只有这样科技才能得以发展,学习也是如此,慢慢积累终会达到质变! |
|
网络协议 最新文章 |
使用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/26 6:29:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |