IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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、既然一组公钥、私钥可以保证单个方向进行安全传输,那么两组公钥、私钥是否就可以保证双向安全传输呢?

过程如下:

  • 某网站服务器拥有公钥A与对应的私钥A’;浏览器拥有公钥B与对应的私钥B’。
  • 浏览器把公钥B明文传输给服务器。
  • 服务器把公钥A明文给传输浏览器。
  • 之后浏览器向服务器传输的内容都用公钥A加密,服务器收到后用私钥A’解密。由于只有服务器拥有私钥A’,所以能保证这条数据的安全。
  • 同理,服务器向浏览器传输的内容都用公钥B加密,浏览器收到后用私钥B’解密。同上也可以保证这条数据的安全。

? 这样可以解决上述问题,但是HTTPS最终并没有使用该加密方式,因为非对称加密算法非常耗时,而对称加密却很快,所以最终的加密方式采用了非对称加密+对称加密,这样非对称加密、解密各只需用一次即可。

过程如下:

  • 某网站拥有用于非对称加密的公钥A、私钥A’。
  • 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
  • 浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。
  • 服务器拿到后用私钥A’解密得到密钥X。
  • 这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都通过密钥X加密解密即可。

4、看似完美的方案,其实还存在缺陷:

? 混合加密的过程中需要服务器将其公钥传输给浏览器,但是能确保浏览器拿到的公钥就是所要访问的服务器的吗?倘若是被掉包了呢?比如:

  • 某网站拥有用于非对称加密的公钥A、私钥A’。
  • 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
  • 但是此时出现了一个中间人,他将公钥A保存下来,并把数据包中的公钥A替换为自己的公钥B。
  • 浏览器生成一个用于对称加密的密钥X,并用公钥B加密后传输给服务器。
  • 中间人抓取浏览器发送的数据,用私钥B’解密得到密钥X,再用公钥A加密密钥X后传输给服务器。
  • 服务器拿到后用私钥A’解密得到密钥X。
  • 此后,浏览器与服务器的交互就可以在不被发现异常的情况下被窃取数据。

? 所以说,必须要确保浏览器获得的公钥是值得信任的。

5、数字证书

? 为了解决冒充服务器的问题,CA机构(数字证书认证机构)出现了。

? 网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。

6、那么问题又来了,数字证书在传输的过程中倘若被篡改了呢?

? 使用数字签名技术可以解决这个问题,但是就我目前而言,先有大概的了解就行,日后若需要再来学习总结~

总结:

??? 关于HTTPS加密机制的学习可谓是一环扣一环,对我而言收获很大。同时体会到一种方案的提出并不一定就是完美的,需要不断去完善,只有这样科技才能得以发展,学习也是如此,慢慢积累终会达到质变!

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:30:16  更:2021-11-18 11:31:46 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码