首页 > 其他分享 >module verification failed: signature and/or required key missing - tainting kernel

module verification failed: signature and/or required key missing - tainting kernel

时间:2024-08-27 10:15:43浏览次数:10  
标签:kernel signing missing required 生成 编译 密钥 key 内核

不同的机器编译同一个版本的内核源码生成的签名密钥 (`signing_key.pem`) 是不相同的。以下是原因和详细解释:

签名密钥 (`signing_key.pem`) 的生成过程

当你在编译内核时,默认情况下,内核编译过程会生成一个新的签名密钥对(包括 `signing_key.pem` 和 `signing_key.x509`)。这个过程使用 `openssl` 命令生成一个 RSA 私钥和相应的自签名证书。

这个过程在每次编译时都会生成一个新的密钥对,具体步骤如下:
1. 内核构建过程中,如果没有提供现有的密钥对,编译系统会调用 `certs/genkey` 脚本。
2. `genkey` 脚本会使用 `openssl` 来生成一个新的 RSA 私钥和相应的自签名证书。

由于每次生成新密钥对时,都会产生不同的 RSA 私钥和证书,因此即使是在相同版本的内核源码下,不同机器生成的签名密钥也是不同的。

如何确保密钥一致

如果你需要在不同机器上使用相同的签名密钥,可以手动生成并分发密钥对,包括将 `signing_key.pem`(私钥)和 `signing_key.x509`(公钥)分发到不同机器。同样地,在内核编译过程中,使用相同的密钥文件。

手动生成和分发签名密钥

1. 生成签名密钥对:

只需在一台机器上生成密钥对:

openssl req -new -x509 -newkey rsa:2048 -keyout signing_key.pem -out signing_key.x509 -days 365 -nodes -subj "/CN=Module Signing Key/"

2. 分发密钥对:

将生成的 `signing_key.pem`(私钥) 和 `signing_key.x509`(公钥)分发到其他需要编译内核的机器上,确保放置在内核源码的 `certs` 目录下。

3. 配置内核使用特定密钥:

在内核配置中指定使用特定的密钥:

CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"

4. 重新编译内核:

在每台机器上使用相同的密钥进行编译:

make -j$(nproc)
make modules_install
make install

通过这种方式,你可以确保在不同机器上编译的相同内核版本使用同一个签名密钥来签署模块。

 总结

不同机器编译相同版本内核源码生成的签名密钥 (`signing_key.pem`) 默认情况下是不同的。如果有需求让不同机器使用相同的签名密钥,可以手动生成密钥并在编译内核前分发和使用该密钥。

标签:kernel,signing,missing,required,生成,编译,密钥,key,内核
From: https://www.cnblogs.com/wanglouxiaozi/p/18381481

相关文章

  • 网站提示411 Length Required:请求未包含Content-Length头怎么办
    当遇到“411LengthRequired”错误时,这意味着服务器要求客户端在请求中包含 Content-Length 头信息,以指示请求体的长度。这个错误通常出现在HTTP的POST、PUT和PATCH请求中,因为这些请求通常包含请求体。解决方案检查请求确认请求是否包含请求体。如果请求体为空,可......
  • 网站提示426 Upgrade Required:客户端需要升级协议才能完成请求怎么办
    当遇到“426UpgradeRequired”错误时,这意味着服务器要求客户端使用更高级的协议来完成请求。这种情况通常发生在客户端尝试使用较旧的协议版本时,而服务器只支持更新的协议版本。解决方案检查客户端协议版本确认客户端使用的协议版本。如果客户端使用的是HTTP/1.1而服务......
  • 网站提示428 Precondition Required:必须在请求中设置先决条件怎么办
    当遇到“428PreconditionRequired”错误时,这意味着服务器要求客户端在请求中包含特定的先决条件(precondition)。这种错误通常出现在客户端尝试执行某项操作时,服务器需要确认某些条件得到满足。解决方案检查请求头确认请求头中是否包含了服务器要求的先决条件。例如,服务器......
  • 微信不能打开,点击微信后显示无法定位程序输入点CreateTOolhelp32Snapshot于动态链接库
    问题描述:解决方法:修复动态链接库KERNEL32.dll重新安装动态链接库KERNEL32.dll检查应用程序兼容性与更新,或查找应用程序的补丁以修复可能存在的与kernel32.dll相关的兼容性问题下载最新版微信,卸载微信,重启电脑,退出杀毒软件后,重新安装最新版。原因:    1、系统文件损......
  • 全志V3S开发(五)-Kernel适配以太网以及nfs、tftp服务开启
    一、Kernel适配Ethernet我使用的linux_kernel版本是5.2.y<1> 配置menuconfig进入linuxkernel目录下/home/daemonchen/linux/V3S/linux_kernel/linux/linux-zero-5.2.y,首先配置menuconfig。makeARCH=armmenuconfig按照如下路径进行配置:#配置以太网DeviceDrivers---......
  • Android SDK is missing required platform api
    如果这个时候选择UpdateAndroidSDK以升级AndroidSDK的话,可能会弹出一个终端窗口,然后自动关闭后又重复弹该窗口,重复数次,最后还是不能成功升级AndroidSDK。线上搜的教程大部分都是叫下载AndroidStudio,可是笔者只想用Unity进行做开发。解决方法导致Unity无法升级A......
  • build linux kernel
    https://www.kernel.org/doc/html/latest/translations/zh_CN/admin-guide/README.htmlhttps://www.kernel.org/https://docs.kernel.org/6.8/安装内核源代码如果您要安装完整的源代码,请把内核tar档案包放在您有权限的目录中(例如您的主目录)并将其解包:xz......
  • Semantic Kernel/C#:接入智谱AI的两种方式
    SemantieKernel中对话请求默认是发送到OpenAI去的:其他与OpenAI对话请求接口兼任的模型平台,一般只需要修改host即可,如下所示:default:uriBuilder=newUriBuilder(request.RequestUri){//这里是你要修改的URLScheme="https",Ho......
  • SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
    SimpleRAG介绍SimpleRAG是基于WPF与SemanticKernel实现的一个简单的RAG应用,可用于学习与理解如何使用SemanticKernel构建RAG应用。GitHub地址:https://github.com/Ming-jiayou/SimpleRAG主要功能AI聊天支持所有兼容OpenAI格式的大语言模型:文本嵌入支持所有兼容OpenAI格式......
  • [C++ Error] f0201.cpp(11): E2379 Statement missing ;
    错误解释:这个错误表明在C++源代码文件f0201.cpp的第11行出现了一个语法错误,具体是缺少了一个分号;。C++语言规定语句的结束需要使用分号;,如果一个语句缺少了它,编译器就会抛出这样的错误。解决方法:打开f0201.cpp文件``,定位到第11行。检查那一行的代码,确保每个语句后面都有分号;......