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

【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告

引言

随着 Debian 11 和 Ubuntu 22.04 版本的推出,APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用,新的密钥管理机制要求使用 /etc/apt/keyrings//etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要,特别是当通过 apt updateapt upgrade 执行系统更新时,可能会遇到关于 apt-key 弃用的警告信息。

本博客将详细讲解如何处理 apt-key 弃用警告,如何迁移到新的密钥管理方法,同时提供具体的命令、步骤和解释,帮助大家更好地理解这一变更。

过渡步骤概览

当您遇到 apt-key 弃用的警告时,通常是因为系统中存在使用 apt-key 添加的密钥。为了应对这种情况,需要进行以下操作:

  1. 确定哪些密钥存储在 /etc/apt/trusted.gpg 文件中
  2. 删除过时的密钥,避免产生警告信息。
  3. 安装并配置替代的密钥,使用新的密钥存储路径 /etc/apt/keyrings//etc/apt/trusted.gpg.d/

目录

  • 引言
  • 一、apt-key 弃用警告解析
    • 1.1 发生了什么?
    • 1.2 为什么要迁移?
    • 1.3 新的密钥管理方式
  • 二、迁移密钥管理的步骤
    • 2.1 查找和删除密钥
      • 2.1.1 查找已存储的密钥
      • 2.1.2 删除不需要的密钥
    • 2.2 获取新的密钥并添加
      • 2.2.1 从官方网站获取 GPG 密钥
      • 2.2.2 使用 `wget` 或 `curl` 下载 GPG 密钥
      • 2.2.3 设置文件权限
    • 2.3 使用 `Signed-By` 选项
    • 2.4 验证密钥是否有效
    • 2.5 完成迁移
  • 三、完整示例:迁移密钥管理密钥
  • 四、迁移流程图
  • 总结

一、apt-key 弃用警告解析

1.1 发生了什么?

在 Ubuntu 22.04 或 Debian 11 中,执行 apt updateapt upgrade 时,可能会出现类似的警告信息:

W: https://updates.example.com/desktop/apt/dists/xenial/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

这条警告的核心信息是:apt-key 命令已经不再推荐使用,并逐步被淘汰。原因在于传统的 apt-key 机制存在安全隐患,并且不符合现代 Linux 系统的密钥管理要求。为了增强系统的安全性和灵活性,APT 引导用户迁移到新的密钥管理方法。

1.2 为什么要迁移?

apt-key 被弃用的原因主要有以下几点:

  • 安全问题apt-key 将所有密钥存储在单个文件中(如 /etc/apt/trusted.gpg),这使得密钥容易受到篡改或丢失的风险。
  • 缺乏灵活性:它无法细粒度地管理每个软件源的独立密钥,尤其是在需要管理多个源时不够方便。
  • 新的标准:推荐使用/etc/apt/keyrings//etc/apt/trusted.gpg.d/ 目录来管理密钥,增强了安全性和可维护性。

这些问题促使了新的密钥管理方式的出现,它可以提高系统的安全性和灵活性,更好地满足现代化需求。

1.3 新的密钥管理方式

新的密钥管理方法建议将密钥文件存储在 /etc/apt/keyrings//etc/apt/trusted.gpg.d/ 目录,并通过 APT 配置文件中的 Signed-By 选项来指定每个软件源的密钥。这样做有几个优点:

  • 独立管理:每个存储库可以使用单独的密钥,避免了 apt-key 所带来的密钥泄露风险。
  • 增强安全性:通过将密钥存储在专用的目录下,密钥管理变得更加安全,且每个密钥的使用场景更加清晰。
  • 灵活性提升:可以更精细地管理每个软件源的认证,提高密钥管理的灵活性。

二、迁移密钥管理的步骤

2.1 查找和删除密钥

首先,检查当前系统中的所有密钥,并删除不再需要的密钥。

2.1.1 查找已存储的密钥

使用 apt-key list 命令查看系统中存储的所有密钥:

$ sudo apt-key list

此命令会显示当前存储在 /etc/apt/trusted.gpg 文件和 /etc/apt/trusted.gpg.d/ 目录中的所有 GPG 密钥。输出信息包括密钥的 ID、相关的仓库以及该密钥的创建日期等信息。

输出示例:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))./etc/apt/trusted.gpg
--------------------
pub   rsa4096 2025-01-20 [SC]A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
uid           [ unknown] Example <support@example.com>
sub   rsa4096 2025-01-20 [E]pub   rsa4096 2025-01-20 [SC]A4B6 2D8F 8F54 6B7A 5E88 7F16 24B2 A562 54D6 5F76
uid           [ unknown] Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com>
sub   rsa4096 2025-01-20 [S] [expires: 2028-01-19]

这些密钥是用来验证各个软件源包的。可以看到,密钥文件中包含多个软件源的密钥,如 Example 和 Google 等。

2.1.2 删除不需要的密钥

可以使用 apt-key del 命令删除不再需要的 GPG 密钥,指定要删除的密钥标识符(通常是一组四位数的十六进制数字)。例如,删除与 Example 相关的密钥,可以执行以下命令:

sudo apt-key del A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32

请根据实际情况替换命令中的密钥标识符删除不需要的密钥。删除密钥后,相关存储库将无法使用此密钥进行认证。如果仍需访问该存储库,必须为其添加新的密钥。

2.2 获取新的密钥并添加

获取和安装新的 GPG 密钥是确保从外部软件源安装软件包时,保持系统安全的一个重要步骤。密钥的获取方法会根据应用程序的不同而有所不同,取决于具体的应用程序。

以下是详细的操作步骤和示例:

2.2.1 从官方网站获取 GPG 密钥

大多数应用程序会在其官方网站提供用于验证软件包的 GPG 密钥,以便验证软件包的完整性和真实性。可以使用 wgetcurl 命令从应用程序的官方网站下载 GPG 密钥。

2.2.2 使用 wgetcurl 下载 GPG 密钥

首先,假设要安装一个应用程序,比如 MyApp,并且该应用程序提供了 GPG 密钥。可以从其官方网站下载密钥。

使用 wget 下载密钥:

wget -qO - https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg

解释:

  • -qO -wget 将以安静模式下载文件并将其输出到标准输出(即终端)。
  • https://myapp.example.com/repo/myapp.gpg:这是应用程序的 GPG 密钥文件的 URL。
  • sudo tee /etc/apt/keyrings/myapp.gpgtee 命令会将密钥保存到 /etc/apt/keyrings/ 目录中。

使用 curl 下载密钥:

curl -fsSL https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg

解释:

  • -fsSLcurl 的选项,确保下载时不显示进度信息、若失败则不输出错误信息,并且支持 SSL。
  • https://myapp.example.com/repo/myapp.gpg:GPG 密钥文件的 URL。
  • sudo tee /etc/apt/keyrings/myapp.gpg:保存密钥到 /etc/apt/keyrings/ 目录。

2.2.3 设置文件权限

确保密钥文件的权限安全,以防止其他用户篡改密钥。

sudo chown root:root /etc/apt/keyrings/myapp.gpg
sudo chmod 644 /etc/apt/keyrings/myapp.gpg
  • chown root:root:确保密钥文件属于 root 用户和 root 用户组。
  • chmod 644:确保文件具有适当的权限,使得只有 root 用户能够修改,其他用户可以读取。

2.3 使用 Signed-By 选项

为确保每个软件源使用正确的密钥,可以将密钥存放在 /etc/apt/keyrings/ 目录,并通过 Signed-By 选项在 APT 配置文件 /etc/apt/sources.list/etc/apt/sources.list.d/ 文件中指定密钥。这样可以提高密钥管理的精确性和安全性。

例如,假设 MyApp 提供了一个软件源,可以将其添加到 APT 的源列表中并使用 Signed-By 指定密钥:

echo "deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/myapp.list

解释:

  • deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main:将 MyApp 的软件源添加到 APT 源列表中,并使用 Signed-By 选项指定 GPG 密钥的路径。
  • deb [signed-by=/etc/apt/keyrings/myapp.gpg]:指定软件源使用 /etc/apt/keyrings/myapp.gpg 作为 GPG 密钥。
  • https://myapp.example.com/debian/ stable main:添加 MyApp 的软件源。

2.4 验证密钥是否有效

要确保密钥已正确配置并生效,可以使用以下命令查看 /etc/apt/keyrings/ 目录下的文件列表:

ls -l /etc/apt/keyrings/

输出应该类似于:

-rw-r--r-- 1 root root 7821 Sep  2 10:55 myapp.gpg

如果看到类似的输出,说明密钥已经正确配置。这些文件代表着不同软件包源的密钥文件。

2.5 完成迁移

完成上述步骤后,可以运行 apt update 命令来检查迁移是否成功。一旦密钥迁移完成,系统将不再显示关于 apt-key 弃用的警告。

sudo apt update

如果一切顺利,更新过程将顺利完成,而不会再显示弃用的警告或错误信息。

三、完整示例:迁移密钥管理密钥

以下示例展示了如何添加 MyApp 软件源并确保其安全性。操作步骤包括下载 GPG 密钥、配置软件源、设置文件权限、并最终安装所需的软件包。

操作步骤概览:

  1. 查找 GPG 密钥:使用 sudo apt-key list 命令查看系统中存储的 GPG 密钥。
  2. 删除不需要的 GPG 密钥:使用 sudo apt-key del 命令删除不需要的密钥。
  3. 下载 GPG 密钥:通过 wgetcurl 命令下载 GPG 密钥。
  4. 存储密钥:将密钥存储到 /etc/apt/keyrings/ 目录。
  5. 设置文件权限:确保密钥文件的权限安全。
  6. 配置 APT 使用密钥:在软件源配置文件中使用 Signed-By 选项指定密钥路径。
  7. 安装软件包:更新软件包列表并安装所需的软件包。

具体步骤:
假设要安装 MyApp,并且该应用程序的 GPG 密钥和软件源都提供了。以下是完整的操作步骤:

  1. 查找系统中已有的 GPG 密钥
sudo apt-key list
  1. 删除不需要的 GPG 密钥

    如果 myapp 密钥的标识符是 A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32,删除命令如下:

    sudo apt-key del A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
    
  2. 下载 GPG 密钥并保存到 /etc/apt/keyrings/ 目录:

    wget -qO - https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg
    
  3. 设置密钥文件的权限:

    sudo chown root:root /etc/apt/keyrings/myapp.gpg
    sudo chmod 644 /etc/apt/keyrings/myapp.gpg
    
  4. 配置 APT添加软件源并指定 GPG 密钥:

    echo "deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/myapp.list
    
  5. 更新软件包列表并安装应用程序:

    sudo apt update
    sudo apt install myapp
    

四、迁移流程图

为了帮助大家更好地理解迁移过程,下面提供了一个流程图,简明扼要地展示了迁移步骤:

CSDN @ 2136
旧的 GPG 密钥存储
删除不必要的旧密钥
获取新的 GPG 密钥
将密钥添加到 APT 配置文件中
验证密钥是否有效
完成迁移, 避免 apt-key 弃用警告
CSDN @ 2136

图解说明

  1. 旧的 GPG 密钥存储:首先,使用 apt-key list 列出当前密钥,确定哪些是过时的或不再需要的。
  2. 删除旧密钥:通过 apt-key del 命令删除不再需要的密钥。
  3. 获取新的 GPG 密钥:根据不同的应用程序或软件源,获取并下载新的 GPG 密钥。
  4. 添加密钥到指定位置:将新的密钥存储到 /etc/apt/trusted.gpg.d/etc/apt/keyrings/ 目录。
  5. 验证密钥有效性:检查密钥是否已正确添加,确保 APT 使用新的密钥进行包验证。
  6. 完成迁移:完成所有步骤后,运行 apt update 检查迁移结果,APT 将不会再显示弃用警告。

总结

通过迁移 apt-key 的密钥管理方式,可以更安全地管理系统的存储库和软件包源,避免将来因 apt-key 被废弃而导致的兼容性问题。通过这篇博客的步骤和示例,应该能够顺利完成密钥的迁移,并确保系统能够继续顺利地进行软件包更新。

对于未来的版本,APT 可能会继续改进密钥管理方式,因此保持系统的更新和对新技术的适应将帮助你保持系统的安全性和稳定性。

在实际操作中,现在可以使用 apt update 而不会遇到与废弃密钥配置相关的警告或错误。需要注意的是,用户应当根据新的要求调整依赖于 apt-key 的旧安装方法,改用将密钥安装到 /etc/apt/trusted.gpg.d//etc/apt/keyrings/ 目录下的方式,并根据需要使用 gpg 来管理密钥。

如果你觉得这篇文章对你有帮助,请留言讨论或分享给更多需要的人!


相关文章:

【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告

引言 随着 Debian 11 和 Ubuntu 22.04 版本的推出&#xff0c;APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用&#xff0c;新的密钥管理机制要求使用 /etc/apt/keyrings/ 或 /etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要…...

洛谷P1143 进制转换

题目链接&#xff1a;P1143 进制转换 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及— 解题思路&#xff1a;本题先将输入的数转为10进制&#xff0c;然后取模&#xff0c;最后倒着输出就好了&#xff0c;最后直接上代码 #include<bits/stdc.h> using namespa…...

99.12 金融难点通俗解释:毛利率

目录 0. 承前1. 简述2. 比喻&#xff1a;冰淇淋店赚钱2.1 第一步&#xff1a;准备材料2.2 第二步&#xff1a;卖冰淇淋2.3 第三步&#xff1a;计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…...

HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”

论文地址&#xff1a;Humanity’s Last Exam 1. 背景与动机 随着大型语言模型&#xff08;LLMs&#xff09;能力的飞速发展&#xff0c;其在数学、编程、生物等领域的任务表现已超越人类。为了系统地衡量这些能力&#xff0c;LLMs 需要接受基准测试&#xff08;Benchmarks&…...

C++从入门到实战(二)C++命名空间

C从入门到实战&#xff08;二&#xff09;C命名空间 前言一、C的第一个程序二、命名空间&#xff08;一&#xff09;为什么需要命名空间&#xff08;二&#xff09;定义命名空间&#xff08;三&#xff09;使用命名空间1.通过命名空间限定符&#xff1a;2.使用 using 声明&…...

C# OpenCV机器视觉:实现农作物病害检测

在酷热难耐的夏日&#xff0c;阳光似火舌般舔舐大地。阿强惬意地躺在老家院子摇椅上&#xff0c;哼着小曲&#xff0c;手边放着一碗冰镇西瓜&#xff0c;头顶大槐树宛如巨大遮阳伞&#xff0c;洒下斑驳阴凉。他本想趁假期回老家放松&#xff0c;远离城市喧嚣与代码 “纠缠”。 …...

开源软件协议介绍

一、可以闭源使用/不具传染性的协议 允许商业使用和分发 1、BSD&#xff1a;详细介绍 2、LGPL许可证&#xff1a;详细介绍 3、MPL2.0&#xff1a;详细介绍 二、具有传染性/使用后需要开源自身软件的协议 不建议商业使用 1、GPL许可证&#xff1a;详细介绍...

CLion开发Qt桌面

IDE&#xff1a;CLion Qt Qt版本&#xff1a;5.12 学习正点原子的嵌入式Linux开发板时&#xff0c;使用Qt Creator写代码不是很方便&#xff0c;遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1&#xff0c;配置工具链 找到Qt的安装目录&#xff0c;此处为E:\Tools\…...

09_异步加载_单例模式_常量类配置_不可销毁

1.首先在 资源加载服务层ResSvc.cs中添加 自定义异步加载函数 using UnityEngine; using UnityEngine.SceneManagement; //异步加载 命名空间 //功能 : 资源加载服务 public class ResSvc : MonoBehaviour{public void InitSvc(){Debug.Log("Init ResSvc...");}//自定…...

士的宁(strychnine)的生物合成-文献精读104

Biosynthesis of strychnine 士的宁&#xff08;strychnine&#xff09; 又名 番木鳖碱 的生物合成 摘要 士的宁&#xff08;番木鳖碱&#xff09;是一种天然产物&#xff0c;通过分离、结构阐明和合成努力&#xff0c;塑造了有机化学领域。目前&#xff0c;士的宁因其强大的…...

【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)

本文项目编号 T 159 &#xff0c;文末自助获取源码 \color{red}{T159&#xff0c;文末自助获取源码} T159&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址&#xff1a; ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文&#xff09;https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…...

ray.rllib 入门实践-2:配置算法

前言&#xff1a; ray.rllib的算法配置方式有多种&#xff0c;网上的不同教程各不相同&#xff0c;有的互不兼容&#xff0c;本文汇总罗列了多种算法配置方式&#xff0c;给出推荐&#xff0c;并在最后给出可运行代码。 四种配置方式 方法1 import os from ray.rllib.algori…...

2025-01学习笔记

1.SpEL 第一次知道它的全称 Spring Expression Language&#xff08;SpEL&#xff09; Value("${my.property}") private String myProperty; Value("#{2 * 3}") private int computedValue; 2.逃逸分析 逃逸分析&#xff1a;当一个对象在方法中被定…...

多线程执行大批量数据查询

// 创建一个固定大小的线程池ExecutorService executorService Executors.newFixedThreadPool(5);// 创建多个查询任务List<Callable<List<ShopCompareBase>>> tasks new ArrayList<>();//查询门店 切割,分成十份List<List<String>> sho…...

ChatGPT高效处理图片技巧使用详解

ChatGPT&#xff0c;作为OpenAI开发的预训练语言模型&#xff0c;主要用于生成自然语言文本的任务。然而&#xff0c;通过一些技巧和策略&#xff0c;我们可以将ChatGPT与图像处理模型结合&#xff0c;实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…...

leetcode——相交链表(java)

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…...

RubyFPV开源代码之系统简介

RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍&#xff08;软件&#xff09;3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐&#xff08;硬件&#xff09;4.1 天空端4.2 地面端4.3 按键硬件Raspberry PiRadxa 3W/E/C 5. 软件设计6. 参考资料 1. 源由 RubyFPV以…...

麦田物语学习笔记:创建TransitionManager控制人物场景切换

基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…...

后端SpringBoot学习项目-用户管理-增删改查-service层

仓库地址 在初版代码中&#xff0c;已经实现了基础的增删改查。 但是&#xff0c;逻辑处理都放在Controller层中并没有分为Service层&#xff0c;所以&#xff0c;代码升级时候必须补充上去。 代码结构 升级后的代码结构有所变化。 --common 公共插件 --controller…...

机器学习11-学习路径推荐

机器学习11-学习路径推荐 本文希望摒除AI学习商业宣传要素&#xff0c;推荐一条极简的AI学习路线&#xff01;推荐内容均为在线免费内容&#xff0c;如果有条件可以咨询专业的培训机构&#xff01; 文章目录 机器学习11-学习路径推荐[toc] 1-AI培训路线第一阶段 Python-人工智能…...

[ACTF2020 新生赛]Upload1

题目 以为是前端验证&#xff0c;试了一下PHP传不上去 可以创建一个1.phtml文件。对.phtml文件的解释: 是一个嵌入了PHP脚本的html页面。将以下代码写入该文件中 <script languagephp>eval($_POST[md]);</script><script languagephp>system(cat /flag);&l…...

【PyTorch】0.初识:从吃货角度理解张量

0.初识张量 PyTorch 是一个 Python 深度学习框架&#xff0c;它将数据封装成张量&#xff08;Tensor&#xff09;来进行运算。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中&#xff0c;张量以 "类" 的形式封装起来&#xff0c;对张量的一些运…...

医学图像分析工具09.1:Brainstorm安装教程

1. 安装前准备 **官方安装包和数据&#xff1a;**https://neuroimage.usc.edu/bst/download.php **官方安装教程&#xff1a;**https://neuroimage.usc.edu/brainstorm/Installation Matlab 版本要求&#xff1a; 有 Matlab&#xff1a; R2009b (7.9) 或更高版本没有 Matlab&…...

springboot基于Spring Boot的智慧养老服务系统的设计与实现

系统介绍&#xff1a; 智慧养老服务系统是一种运用现代科技手段&#xff0c;整合各类养老资源&#xff0c;为老年人提供全方位、个性化服务的综合性平台。该系统通过智能化设备、大数据分析、云计算等技术&#xff0c;实现对老年人健康状况、生活需求的实时监控与精准匹配&…...

Linux内核中IPoIB驱动模块的初始化与实现

InfiniBand(IB)是一种高性能的网络互连技术,广泛应用于高性能计算(HPC)和数据中心。为了在InfiniBand网络上运行标准的IP协议栈,Linux内核提供了IP over InfiniBand(IPoIB)驱动模块。IPoIB允许在InfiniBand网络上传输IPv4和IPv6数据包,从而使得现有的IP应用程序能够无…...

WPS计算机二级•幻灯片的基础操作

听说这是目录哦 PPT的正确制作步骤&#x1f6e3;️认识PPT界面布局&#x1f3dc;️PPT基础操作 快捷键&#x1f3de;️制作PPT时 常用的快捷技巧&#x1f3d9;️快速替换PPT的 文本字体&#x1f303;快速替换PPT 指定文本内容&#x1f305;能量站&#x1f61a; PPT的正确制作步…...

.NET9增强OpenAPI规范,不再内置swagger

ASP.NETCore in .NET 9.0 OpenAPI官方文档ASP.NET Core API 应用中的 OpenAPI 支持概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/overview?viewaspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/ope…...

基于微信小程序的民宿预订管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

网络(三) 协议

目录 1. IP协议; 2. 以太网协议; 3. DNS协议, ICMP协议, NAT技术. 1. IP协议: 1.1 介绍: 网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议. 路径选择: 确…...