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

简单了解HTTP和HTTPS

HTTP的安全问题?

我们都知道HTTP是不安全的,而HTTPS是安全的,那HTTP有哪些安全问题呢?(考虑传输过程以及响应方)

  • 明文传输,有窃听风险:HTTP协议无法加密数据,所有通信数据都在网络中明文传输,通过网络的嗅探设备及一些技术手段,就可轻易窃听并还原HTTP报文内容。

  • 无法验证数据完整性,有篡改风险:HTTP协议无法证明通信的报文完整性发送方发出的请求和接收方接收到的响应是前后相同的,没有被篡改的。

  • 无法验证通信方身份,有冒充风险:在请求或响应到达接收方这段时间内,请求或响应被第三方拦截伪造之后再次发出,通信双方也无法知晓。

HTTPS如何解决的?

  • 混合加密明文解决窃听风险

  • 摘要算法为数据生成一个唯一的指纹,通过指纹验证报文完整性,解决篡改风险

  • 将服务器公钥放入到数字证书中,并把证书注册到CA,解决了冒充风险。

混合加密

HTTPS采用了非对称加密对称加密结合的方式:

  • TLS握手期间采用非对称加密交换交换随机数生成会话密钥

  • 此后的通信过程采用对称加密的会话密钥进行加密

为什么用混合加密?

对称加密虽然加密、解密的运算速度快,但是如果在HTTP明文传输密钥,那密钥可能会被窃取,也就相当于没有加密;

所以在对称加密之前,用非对称密钥加密随机数生成一个对称加密的会话密钥,保证这个会话密钥不会被窃取。

那为什么不直接用非对称密钥加密来进行通话的数据加密呢?

那是因为非对称密钥加密、解密的运算速度会比对称加密慢,对于数据通信我们自然不希望加密、解密的运算速度比传输的RRT还长。

非对称加密和对称加密的区别?

  • 非对称加密:发送方用接收方的公钥加密,接收方用私钥解密;或者发送方用自己的私钥加密,接收方用自己的公钥解密

  • 对称加密:双方用同一对密钥进行加密和解密

摘要算法

以下的指纹、hash值都是一个意思。

为了保证传输的内容不被篡改,我们需要对内容计算出一个「指纹」,这个哈希值是唯一的,且无法通过哈希值推导出内容。然后同内容一起传输给对方,接收方再次计算数据的hash值,和指纹比对,相同说明数据没有被篡改,但是不能说明内容和hash值没有一起被篡改(也就是消息来源是正确的吗?),这时候就要用到非对称加密:

  • 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,保证只有私钥拥有者才能获取到数据

  • 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,保证消息来源是正确的

对指纹用私钥加密,然后客户端有对应的公钥,就可以解密,比对数据的hash值和指纹,相同则说明内容没有被篡改。

数字证书认证机构(CA)

万一公钥是被伪造的呢?这时候就需要有第三方的验证。

CA是第三方权威机构,服务端把「个人信息 + 公钥」打包成一个数字证书,放到CA,CA会用自己的私钥加密数字证书得到一个数字签名,客户端收到数字证书后先去CA验证是否合法(用CA的公钥解密,比对hash值),如果验证成功,就可以获取到服务端的公钥。

HTTPS建立连接流程

TLS握手在TCP三次握手之后,那RSA算法举例,主要分为以下几个步骤:

  1. 客户端发送请求,询问服务端用哪些密码套件和TLS版本

  2. 服务端ACK确认密码套件和TLS版本,同时会向客户端发送自己的数字证书(有服务端的公钥),客户端收到之后进行验证数字证书有效,从中获取到服务端公钥,用公钥加密一个随机数发送给服务端,服务端收到后用自己的私钥解密得到随机数,用这个随机数生成一个对称的会话密钥

  3. 客户端发送请求,请求之后的会话都用这个会话密钥,服务端响应ACK

  4. 服务端发送请求,请求之后的会话都用这个会话密钥,客户端响应ACK

  5. TLS握手完成,HTTPS建立连接完成

如何验证数字证书有效?

正如前面的摘要算法以及CA提到的,会对原文生成一个指纹,CA用私钥加密这个指纹得到数字签名,服务端同样对原文生成一个指纹,用CA公钥解密数字签名得到一个hash值,比对hash值和指纹,如果相同则说明验证成功。

HTTPS真的安全吗?

当有第三方在客户端和服务端中间,第三方伪造服务端和客户端TLS握手,同时第三方伪造客户端和服务端TLS握手,不就会产生问题吗?

换个问题表述,可以理解为第三方冒充的问题,主要是数字证书的信任问题,当你点击一个有风险的连接,浏览器会弹出警告,这时候如果你点击拒绝访问,自然TLS握手失效,也就不会有后面的数据通信过程;或者是电脑中病毒了,被第三方恶意植入了它的证书,浏览器不会弹出风险警告,那么通信也不再安全。

http://www.lryc.cn/news/332034.html

相关文章:

  • 系列学习前端之第 9 章:一文搞懂 Node.js 和 nvm,掌握 npm
  • 超强命令行解析工具Apache Commons CLI
  • JAVAEE——多线程进阶,锁策略
  • 富文本编辑器Quill全套教程
  • Swift 代码注释的使用
  • 蓝桥杯—DS1302
  • nginx: 集群环境配置搭建
  • Linux:进程终止和等待
  • 一、next-auth 身份验证凭据-使用电子邮件和密码注册登录
  • 2.SpringBoot利用Thymeleaf实现页面的展示
  • devtool: ‘source-map‘ 和 devtool: ‘#source-map‘的区别
  • Flutter Boost 3
  • ElementUI响应式Layout布局xs,sm,md,lg,xl
  • 机器学习——典型的卷积神经网络
  • 速通数据结构与算法第四站 双链表
  • 51单片机学习笔记12 SPI接口 使用1302时钟
  • php编辑器 ide 主流编辑器的优缺点。phpstorm vscode atom 三者对比
  • 【动手学深度学习】深入浅出深度学习之RMSProp算法的设计与实现
  • 大转盘抽奖小程序源码
  • 数据结构(无图版)
  • 软件测试中的顶级测试覆盖率技术
  • vscode使用技巧
  • JSP
  • Mybatis--TypeHandler使用手册
  • 网络编程(TCP、UDP)
  • Python快速入门系列-7(Python Web开发与框架介绍)
  • 最长对称子串
  • 【大模型】大模型 CPU 推理之 llama.cpp
  • 异地组网怎么管理?
  • Kafka参数介绍