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

【计算机网络】HTTPS加密机制详解:从对称加密到证书认证的安全通信

文章目录

  • 前言
  • 1. 前置
    • 1.1 加密的方式
    • 1.2 基本概念
  • 2. HTTPS 加密过程
    • 2.1 只采用对称加密
    • 2.2 只采用非对称加密
    • 2.3 双方都使用非对称加密
    • 2.4 非对称加密 + 对称加密
      • 中间人攻击
    • 2.5 非对称加密 + 对称加密 + 证书认证
      • CA 机构与 CA 证书

前言

HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引入了一个加密层。HTTP 协议内容都是按照文本的方式明文传输的。这就导致在传输过程中出现一些被篡改的情况。

所以,在 TCP/IP 网络协议栈中,在应用层和传输层之间,我们添加一层对于数据安全传输协议(SSL/TLS),来保证数据的通信是安全和完成的。

  • 如下图:

    在这里插入图片描述

简单来说:

  • HTTPS = HTTP + SSL/TLS

本文就是来探究 HTTPS 是如何维护数据的安全性的。

1. 前置

在正式探究 HTTPS 协议的安全性之前,我们还需要了解一些前置的知识。

我们先来介绍几组概念:

  • 加密就是把明文(要传输的信息)进行一系列变换,生成密文
  • 解密就是把密文再进行一系列变换,还原成明文。
  • 在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥

1.1 加密的方式

来探讨加密的方式之前,我们需要了解:为什么数据是需要加密的?

  • 来看下面一张示例(中间人攻击):

    在这里插入图片描述

    上图就是一个典型的中间人攻击的例子。

    臭名昭著的 “运营商劫持” 下载一个 天天动听。
    • 未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接。
    • 已被劫持的效果,点击下载按钮,就会弹出 QQ 浏览器的下载链接。

    由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器、交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改。点击 “下载按钮”,其实就是在给服务器发送了一个 HTTP 请求,获取到的 HTTP 响应其
    实就包含了该 APP 的下载链接。运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成 “QQ 浏览器” 的下载地址了。

    我们通过网络的数据是会经过运营商服务等多种物理节点的。因为我们的 HTTP 协议的内容是明文传输的,如果我们不将数据进行加密,那么当我们的数据到达中间设备的时候,中间人就可以劫持解析得到我们的数据请求甚至随意篡改。而又可以在不知不觉间将数据替换,但是对于通信双方来说,都是无法察觉的。(中间人攻击)。

下面我们介绍两种加密方式:

  1. 对称加密

    采用单钥密码系统的加密方法,同一个密钥可以同时用作加密和解密,这种加密方法我们称之为对称加密(也被称为:单密钥加密)

    特征:加密和解密的密钥使用的相同的。

    特点

    • 算法公开

    • 计算量小

    • 加密/解密速度快、效率高

  2. 非对称加密

    相对于对称加密,非对称加密需要使用两个密钥来进行加密和解密。这两个密钥是公开密钥(简称:公钥)和私有密钥(简称:私钥)。

    特征:加密和解密的密钥使用的不相同的。

    特点

    • 算法强度复杂

    • 加密/解密速度较慢、效率较低

    注意:公钥和私钥是配对的。最大的缺点就是运算速度非常慢,比对称加密要慢很多。

    用法

    • 通过公钥对明文加密, 变成密文;通过私钥对密文解密, 变成明文

    • 通过私钥对明文加密, 变成密文;通过公钥对密文解密, 变成明文

    注意:使用公钥加密的数据,只能用私钥来解密

1.2 基本概念

  1. 数据摘要(数据指纹)

    概念:数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定长度的整型/字符串(通常是16进制的字符串形式)。

    作用:数字摘要并不是一种加密机制,但可以用来判断数据有没有被篡改。如果数据发生篡改,那么前后数据的数据摘要是不匹配的。

    摘要常见算法:有 MD5、SHA1、SHA256、SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低

    数据摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比

  2. 数字签名

    数据摘要经过加密之后形成的数据就是数字签名。

2. HTTPS 加密过程

我们这里采用逐步递进设计不同的加密方式来得出最终的结论。

  • 共识

    如果通信双方需要安全的通信。通信的双方在进行通信之前需要协商密钥。我们不可能让通信的双方内置对方的密钥。一个典型的例子就是:一个服务器是需要和多个客户端进行数据交互的,如果一个服务器将每一个客户端的密钥信息都内置了,那么不敢想象这是一个多么夸张的负担。

    • 最佳的做法就是:就是能在通信的双方(客户端和服务器)建立连接的之后,双方先协商确定这次的密钥

    • 但是如果直接把密钥明文传输,那么黑客也就能获得密钥了。此时后续的加密操作就形同虚设了。因此密钥的传输也必须加密传输

2.1 只采用对称加密

  • 双方都只采用对称加密的方式。

但是这个方式的弊端很明显:假设客户端向服务器协商密钥的时候,将自己的公钥发送给服务端。这个时候公钥本身就是一个明文传输,这样本来就是不安全的,所以这样的简单方案是行不通的。

2.2 只采用非对称加密

  • 双方都只采用非对称加密。

鉴于非对称加密的机制,如果服务器先把公钥以明文方式传输给客户端,之后客户端
向服务器传数据前都先用这个公钥加密好再传,那么来自客户端信息就可以通过服务器的私钥进行解密,从客户端到服务器信道似乎是安全的(有安全问题,后面一种方案会介绍中间人攻击),因为只有服务器有相应的私钥能解开公钥加密的数据。

但是服务器到客户端的这条路怎么保障安全?

如果服务器用它的私钥加密数据传给客户端,那么客户端用公钥可以解密它,而这个
公钥是一开始通过明文传输给客户端的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。

所以不谈客户端到服务器的安全问题,光是服务器到客户端的数据就是不安全的。

2.3 双方都使用非对称加密

  • 服务端拥有公钥 S 与对应的私钥 S’;客户端拥有公钥 C 与对应的私钥 C’

服务器先以明文的方式将自己的公钥 S 发送给客户端,客户端收到之后在将自己的公钥 C 用公钥 S 进行加密回复服务器,当服务器收到回复后,就可以通过自己的私钥 S’ 来解密数据从而拿到来自客户端的公钥 C。那么这个时候,双方通信都能用自己的公钥加密,自己的私钥解密获取对方的数据了(公钥加密的数据,只有持有私钥的人才能解密)。

但是上面这样的方案有两个问题:

  1. 效率太低了。
  2. 仍然是有中间人攻击的风险的(后面会介绍的)。

2.4 非对称加密 + 对称加密

双方使用非对称加密,我们能看到上述方案是存在效率问题的,于是基于这样的思想,我们可以先来考虑如何提高上面的效率

  • 服务端拥有公钥 S 与对应的私钥 S’;客户端拥有对称密钥 C。

服务器先以明文的方式将自己的公钥 S 发送给客户端,客户端收到之后在将自己的对称密钥 C 用公钥 S 进行加密回复服务器,当服务器收到回复后,就可以通过自己的私钥 S’ 来解密数据从而拿到来自客户端的对称公钥 C。从此之后,服务器和客户端双方进行通信的过程仅仅使用来自客户端的对称公钥 C 即可。效率就得到了提升

但是,这样的方案仍然是由安全隐患的。


中间人攻击

上面的每一种方案都是具有同一种安全隐患

假设数据在第一次就被挟持了呢?

  • 客户端具有对称密钥 X。
  • 服务器具有非对称加密算法的公钥 S,私钥 S’
  • 中间人具有非对称加密算法的公钥 M,私钥 M’
  1. 服务器明文传送公钥 S 给客户端。

  2. 中间人劫持数据报文,提取公钥 S 并保存好,然后将被劫持报文中的公钥 S 替换
    成为自己的公钥 M,并将伪造报文发给客户端

  3. 客户端收到报文,提取公钥 M(客户端是不清楚这是公钥是否被替换过),自己将对称密钥 X,用公钥 M 加密对称密钥 X,形成报文发送给服务器。

  4. 中间人同时劫持来自客户端的加密数据,直接用自己的私钥 M’ 进行解密,得到通信秘钥 X再用曾经保存的服务端公钥 S 加密后,将报文推送给服务器

  5. 服务器拿到报文,用自己的私钥 S’解密,得到通信秘钥 X。

  6. 服务器和客户端双方开始采用 X 进行对称加密,进行通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改。

这样的中间人攻击都是可以攻击上面的所有方案。


2.5 非对称加密 + 对称加密 + 证书认证

  • 问题本质出在哪里了呢?

    客户端无法确定收到的公钥,是否就是目标服务器发送过来的

所以我们需要一个方式:能够让客户端相信收到的公钥是有效的


CA 机构与 CA 证书

服务端在使用 HTTPS 前,需要向 CA 机构 申领一份数字证书,数字证书里含有证书申请者信息、公钥信息(服务器的公钥信息) 等。服务器把证书传输给客户端,客户端从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性

当服务端申请 CA 证书的时候,CA 机构会对该服务端进行审核,并专门为该网站形成数字签名,过程如下:

  1. CA 机构自己拥有非对称加密的私钥 A 和公钥 A’。

  2. CA 机构对服务端申请的证书明文数据进行哈希算法,形成数据摘要

  3. 然后对数据摘要用 CA 私钥 A’ 加密,得到数字签名 S 服务端申请的证书明文和数字签名 S 共同组成了数字证书,这样一份数字证书就可以颁发给服务端了。

  • 客户端是会内置一些 CA 机构的公钥 A 的

那么在CA验证下如何验证客户端是如何保证来自服务端的公钥 S 是合法的呢?

  • 如下图的验证信息的权威性:

    在这里插入图片描述

关键

  1. 数据摘要的形成是基于服务端上交给 CA 机构的申请信息所形成的。所以不同的机构的所申请的内容是不同的,而这个数据摘要也具有唯一性。
  2. 数据签名的形成是基于上面的数据摘要,它一定是需要 CA 机构的私钥 A’ 来实现加密。因为客户端在解密的时候一定是用的 CA 机构的公钥 A。
  3. 客户端还需要进行一步验证,这步验证也是很关键的。通过自己利用 CA 机构所使用的哈希算法得到一份数据摘要X,同时再用 CA 机构的公钥 A 解密数据签名得到一个数据摘要 X’。若 X == X’,那么就能说明该证书信息是可靠的,客户端就可以利用证书种的服务端公钥进行加密;否则,这个证书信息是不可靠的。

那么在这样的情况下的建立安全的信道流程应该是怎么样的呢?

注意:在客户端发起 HTTPS 请求的时候就会和服务端进行 TSL 版本协商等等。

  1. 服务端明文向客户端发送其CA证书。

  2. 客户端验证证书的合法性。通常验证证书:信任链验证、域名验证、有效期验证、吊销状态检查……

  3. 客户端验证通过之后,进行对称密钥的交互。客户端利用证书中的公钥,加密自己的对称密钥,发送给服务端。

  4. 服务器解密密钥。服务器用自己的私钥解密得到来自客户端的对称密钥

  5. 之后就可以利用这个对称密钥进行安全高效的通信了。

注意:实际的过程可能比该过程还要复杂一些,上面是简化后的建立安全通信信道的过程。


  • 考虑建立连接和请求发送的过程
客户端服务端1. 建立TCP连接 (三次握手)SYNSYN-ACKACK✅ TCP连接已建立2. TLS安全协商 (握手)Client Hello (支持版本、密码套件等)Server Hello (选定版本、密码套件等)Server Certificate (发送证书)客户端验证证书利用服务端公钥进行加密自己的对称密钥双方生成相同的会话密钥Change Cipher Spec(开始加密)Finish(“加密”信息)Change Cipher Spec(开始加密)Finish(“加密”信息)✅ 加密隧道已建立3. 发送HTTPS应用数据真实的HTTP请求 (GET /index.html)加密的HTTP响应 (200 OK + 网页数据)客户端服务端
  • 大家可以自行分析为什么这样的方案是安全的

小结:

HTTPS 工作过程涉及密钥到三组:

  1. 第一组(非对称加密):用于考试证书是否被修改。服务器有私人证书(私人证书持有CSR文件及申请证书时获得得),客户端有密钥(操作系统包含可受托的CA认证机构有哪些,同时持有对应的密钥)。服务器在客户端请求是,返回端带签名的真是证书。客户端通过这个公钥进行证书验证,保证证书的合法性,进一步保证证书中携带的服务端公钥权威性。

  2. 第二组(非对称加密):用于协商生成对称加密的密钥。客户端使用收到的CA证书中的秘密(是可被信任的)给予随生的称为加密的密钥传输给服务器,服务器通过私钥获取到对称加密的密钥。

  3. 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥解密

http://www.dtcms.com/a/546065.html

相关文章:

  • Rust WebSocket 实战:从握手帧到百万连接的架构级落地
  • 做医疗网站要几个人表情包生成器在线制作
  • 【AI WorkFow】n8n 源码分析-项目结构(一)
  • 北京网站建设咸宁商城网站模板库
  • 推动楼宇自控系统长效发展:可持续策略与实践要点
  • 影盟自助网站建设阿里云wordpress更新
  • 景区门户网站建设魏县做网站的
  • jQuery Mobile 列表内容
  • 西安网站开发公司保山哪里有网站建设
  • 合肥网站空间市环保局网站建设方案
  • 【HarmonyOS】通知的基本操作
  • 乐吾乐3D可视化数字孪生案例【储能电站智慧园区可视化】
  • 仓颉反射API深度解析:从原理到鸿蒙生态实战
  • 城乡与住房建设厅网站首页网站建设服务哪家好
  • rust:猜数字小游戏
  • 天河网站+建设信科网络申请免费网站建设
  • 做ppt的软件怎么下载网站台州路桥做网站的公司
  • 网站如何做备份谷歌账号注册
  • 第三次周赛题解
  • 6.3.2.1 大数据方法论与实践指南-实时任务质量治理
  • 网站页面设计需求文档案例学 网页设计与网站建设
  • 前后端实现国密2加密
  • 企业免费建站选哪个?客观解析实用方案​
  • 卖网站怎样做百度怎么创建自己的网站
  • 网站建设方案范文8篇网络技术论坛
  • Linux驱动开发笔记(十六)——INPUT
  • 做片头网站万网空间最多放几个网站
  • AI推理计算需求飞升,在传统路径外,聚焦异构计算发展
  • KEIL(MDK-ARM)的快捷键汇总
  • 深兰科技入选“2025中国人工智能行业创新力企业百强”