当前位置: 首页 > article >正文

HTTP加密

文章目录

    • 原理
    • 方式
    • 证书

原理

HTTP = HTTPS + TLS/SSL(数据的加密解密层)

HTTP是应用层的协议,当应用层向下访问的时候并不是直接访问到socket层,而是先通过TLS/SSL加密解密层后再进行后续工作。此时得到的协议就是HTTPS。

举个例子:如何防止一个文本中的内容被篡改?以及说识别到是否被篡改?

加密理论:

在这里插入图片描述

数据传输过程是以加密以后的形式传输的,即数据+数字签名。

一方接收到数据后:

在这里插入图片描述

方式

加密方式有两种:

  1. 对称加密

  2. 非对称加密

  • 对称加密

密钥只有一个,用X表示。发送的数据用X加密,收到的时候也要用X来解密。

对于对称加密来说,密钥协商的方式是不合适的,因为第一次传输密钥的时候就可能会被知道密钥是什么。

  • 非对称加密

有一对密钥:公钥和私钥。

用公钥加密,但是要用私钥解密;反过来用私钥加密,要用公钥解密。常见的非对称加密有RSA。

一般而言,公钥是全世界公开的,私钥是自己私有保存的。

  1. 方式一(错误)

server端先把公钥给到client端,然后client端利用这个公钥进行数据加密,再将其传输给server端。这种方式在公钥加密的数据被拦截后,依旧无法破解,因为只有server端拥有解密的私钥。

目前为止数据是安全的,但是当server端将数据发送回client端的时候,如果用私钥加密,此时的所有人都可以对其进行解密,这就显得徒劳无功了。

所以一对非对称公钥私钥是无法完成安全传输的。

  1. 方式二(错误)

既然一对不行就用两对,分别在通信前交换双方的公钥进行加密,在通信时也能分别用自己的私钥解密。

这听起来很好,但是也有两个弊端:首先这种方式也有被窃取数据的风险,其次非对称加密算法是很复杂的,这种方式会很消耗时间,效率低下。

因此我们都是采用对称+非对称相结合的方式。

  1. 方式三(正确)

协商阶段—非对称加密
数据传输阶段—对称加密

在通信前,server端将自己的公钥S给到client端,然后client端用这个公钥S给自己的私钥-C进行加密,传输给server端,这是非对称方式的通信。

此时双方就都知道了需要进行通信的密钥-C,那么就可以通过-C,以对称的方式进行通信。

这个过程是安全的,因为私钥-S仅在server端,所以不用担心第一次传输公钥S的时候会被破坏。

但是这是没有刻意攻击的前提下,如果有人刻意攻击,是可以将第一次传输公钥给拦截然后包装成它自己的,进而获取待会client发送来的私钥。

这里的本质问题是,client端不知道此时的公钥已经被做了手脚了。此时的解决方法就是证书。

证书

CA证书机构是一个服务商,经过权威认证,该机构就是合法的。

该机构拥有自己的公钥和私钥。

申请证书的过程:申请证书需要提供企业的基本信息、域名、公钥。

  • 原理

CA机构利用自己的公钥将数据进行加密,利用私钥-A形成该机构的数字签名,此时只有公钥A才能解开该数字签名。

在上述提到的过程中,并不是直接将公钥发送到client,而是发送证书:

在这里插入图片描述

所以证书的构成就是:数据+该机构的数字签名。

这里几种情况:

  1. 攻击者想篡改整个证书
  2. 攻击者想篡改数据但不改数字签名
  3. 攻击者想篡改数字签名但不改数据

首先篡改整个证书是可行的,因为改CA机构的A公钥大家都有,但是这样的话就无法重新形成数字签名了,因为这个数字签名是CA机构自己用-A私钥生成的。也就是说,只有CA机构能够重新形成数字签名。那么此时的攻击者即使篡改了整个证书,也是无法获得client端的认可的。

其次最后两种情况都是不可能的,因为一旦数字签名和数据内容不一样,散列/解密以后一对比就会自动被识别出来。

这里有个前提,client端必须要知道CA机构的公钥,这基本上是内置的。

  • 还有一个问题就是如果攻击者也是一个合法的机构,它将整个报文都给修改了,而使用自己的报文,该怎么办?

这其实也是不可能的,因为证书里面已经包含了目标域名,那么client端识别出来以后自然也就弃用了。

这也是有证书和无证书的很大差别,如果没有证书的话,client端并不会知道自己获得的公钥是否是自己想要的,但是有了证书以后就能通过域名知道是否合法。


http://www.kler.cn/a/17512.html

相关文章:

  • AutoCad 无界面开发
  • three.js 杂记
  • 网站小程序app怎么查有没有备案?
  • 【QT】QSS
  • 【前端】Vue中如何避免出现内存泄漏
  • 九州未来再度入选2024边缘计算TOP100
  • 身份鉴别解读与技术实现分析(1)
  • 【Linux】多路转接--select、poll、epoll,非阻塞等待
  • 超大excel文件读,避免内存溢出
  • 【华为OD机试真题 Python】简单的解压缩算法 (100%通过)
  • node之Express
  • 【GAMES101】05 Rasterization(Triangles)
  • 【初学人工智能原理】【4】梯度下降和反向传播:能改(下)
  • 算法设计与分析期末复习
  • 判断密码判断密码
  • 删除游戏-类似打家劫舍
  • Canvas和SVG有什么区别?
  • java基础知识——26.反射
  • 架构集群部署
  • 深度学习 -- PyTorch学习 torchvision工具学习 Transforms模块 Normalize用法
  • Db2 hardcode一个CTE
  • 科研人必看入门攻略(收藏版)
  • B017_群函数篇
  • ( 数组和矩阵) 287. 寻找重复数 ——【Leetcode每日一题】
  • Python JSON
  • 网络安全合规-数据安全风险评估