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

linux中给自己编译的模块签名

一、生成签名需要的公私钥:

1. openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

参数解释

  • req: 表示这是一个证书签名请求(CSR)相关的操作,但在这里与 -x509 一起使用,表示直接生成一个自签名的X.509证书。
  • -x509: 生成一个X.509格式的自签名证书,而不是一个CSR。
  • -newkey rsa:2048: 生成一个新的2048位RSA私钥。
  • -keyout key.pem: 指定生成的私钥输出文件名为 key.pem
  • -out cert.pem: 指定生成的证书输出文件名为 cert.pem
  • -days 365: 证书的有效期为365天。
  • -nodes: 表示生成私钥时不进行加密,即不设置密码。

用途
这个命令通常用于生成一个简单的自签名SSL/TLS证书,用于测试或内部使用。

2. openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"

参数解释

  • 大部分参数与第一个命令相似,但有几个不同点:
  • -subj "/CN=Descriptive name/": 直接在命令行中指定了证书的主题信息(Subject),这里只设置了通用名称(CN)。
  • -outform DER: 指定输出格式为DER编码,而不是默认的PEM格式。
  • -out MOK.der: 指定生成的证书输出文件名为 MOK.der,且格式为DER。
  • -days 36500: 证书的有效期设置为36500天,这是一个非常长的有效期,通常不推荐这样做,除非有特别的需求。

用途
这个命令可能用于生成一个特定格式(DER)和主题信息的自签名证书,可能用于一些特定的安全需求,比如机器所有者密钥(MOK)在UEFI安全启动中。

3. openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config configuration_file.config -outform DER -out public_key.der -keyout private_key.priv

参数解释

  • -utf8: 指定输入的字符串(如证书主题信息)使用UTF-8编码。
  • -sha256: 使用SHA-256哈希算法来签名证书。
  • -batch: 自动处理所有提示,不等待用户输入,这通常与 -config 参数一起使用,从配置文件中读取所有必要的信息。
  • -config configuration_file.config: 指定一个配置文件,该文件中包含了证书生成所需的所有信息,如主题、扩展等。
  • -out public_key.der-keyout private_key.priv: 分别指定生成的证书(实际上是公钥证书)和私钥的输出文件名,且证书格式为DER。

用途
这个命令用于从配置文件中读取所有必要的信息来生成一个自签名证书和私钥对,适用于需要自动化和/或详细配置的场景。

区别总结:

  1. 输出格式:第一个命令生成PEM格式的文件,而第二和第三个命令生成DER格式的文件。
  2. 有效期:第二个和第三个命令设置了非常长的有效期(36500天),而第一个命令设置了标准的365天。
  3. 输入方式:第三个命令使用配置文件来自动处理输入,而前两个命令要么直接在命令行指定主题信息,要么通过交互式提示来获取。
  4. 用途和特定需求:第一个命令适用于一般测试或内部使用,第二个命令可能用于特定的安全需求(如UEFI安全启动),第三个命令适用于需要自动化和/或详细配置的场景。

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
O = <你的签名key的名字>
emailAddress = <你的E-mail>

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid

这个配置文件是用于 OpenSSL 生成证书签名请求(CSR)或自签名证书时的模板。配置文件分为几个部分,每个部分都定义了生成证书时所需的不同参数。下面是对配置文件中各个部分的详细解释:

[ req ]

  • default_bits = 4096:指定生成的私钥的位数为4096位。这是RSA私钥的强度,位数越高,安全性越强,但计算也会更耗时。
  • distinguished_name = req_distinguished_name:指定在生成CSR或证书时要使用的区别名(DN)的部分。DN包含了证书主体的识别信息,如组织名(O)、电子邮件地址(emailAddress)等。
  • prompt = no:表示在生成CSR或证书时不提示用户输入DN信息。这通常用于自动化脚本中,所有信息都已在配置文件中预先定义。
  • string_mask = utf8only:指定输入字符串的编码为UTF-8。
  • x509_extensions = myexts:指定在生成自签名证书时要使用的X.509扩展部分。这些扩展定义了证书的一些额外属性,如用途限制等。

[ req_distinguished_name ]

这部分定义了DN的具体信息:

  • O = <你的签名key的名字>:组织名(Organization)。这里应该填写你的组织或个人的名称,但在示例中它被标记为“你的签名key的名字”,这可能是一个占位符,你应该根据实际情况填写。
  • emailAddress = <你的E-mail>:电子邮件地址。这里应该填写你的电子邮件地址,用于证书的联系信息。

[ myexts ]

这部分定义了X.509证书扩展:

  • basicConstraints=critical,CA:FALSE:基本约束扩展。critical表示这是一个关键扩展,必须被遵守。CA:FALSE表示这个证书不是用来签发其他证书的CA(证书颁发机构)证书。
  • keyUsage=digitalSignature:密钥用途扩展。这里指定私钥只能用于数字签名,不能用于加密或其他用途。
  • subjectKeyIdentifier=hash:主题密钥标识符扩展。这里指定使用私钥的哈希值作为标识符。
  • authorityKeyIdentifier=keyid:颁发机构密钥标识符扩展。这里指定使用颁发机构证书的公钥的哈希值作为标识符。注意,在自签名证书中,颁发机构和主体是相同的,所以这个扩展实际上会引用证书自己的公钥哈希值。

生成密钥

openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config configuration_file.config -outform DER -out public_key.der -keyout private_key.priv

给你的模块签名

/scripts/sign-file sha256 private_key.priv public_key.der /path/to/module

登记你的公钥

公钥要登记在MOK list里

sudo mokutil --import my_signing_key_pub.der

这时系统会要你为MOK登记设置一个密码
设置完密码后,重启:

sudo reboot```
重启过程中会进入EFI的确认界面,输入刚刚设置的密码,一直确认就行
重启后,输入
```c
sudo keyctl list %:.system_keyring


 


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

相关文章:

  • flink的EventTime和Watermark
  • MongoTemplate 性能优化指南
  • /src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景
  • 【Axios使用手册】如何使用axios向后端发送请求并进行数据交互
  • 【机器学习】机器学习的基本分类-自监督学习(Self-supervised Learning)
  • PCL 点云多边形面积计算
  • element-ui下拉输入框+resetFields无法回显
  • 【物联网原理与运用】知识点总结(上)
  • node-sass@4.14.1报错的最终解决方案分享
  • Markdown中状态图的用法
  • Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别
  • 一个个顺序挨着来 - 责任链模式(Chain of Responsibility Pattern)
  • LabVIEW之树形控件
  • el-table 自定义表头颜色
  • HTML5 旋转动画(Rotate Animation)详解
  • k8s的ip地址分别都是从哪里来的
  • 【Uniapp-Vue3】v-model双向绑定的实现原理
  • 第30天:Web开发-PHP应用组件框架前端模版渲染三方插件富文本编辑器CVE审计
  • K-Means 聚类算法:用生活场景讲解机器学习的“分组”方法
  • INT301 Bio Computation
  • 基于 Python 的 PDF 动画翻页效果的阅读器实现
  • Android NDK开发入门2之适应idm环境
  • .NET AI 开发人员库 --AI Dev Gallery
  • Linux pget 下载命令详解
  • filebeat、kafka
  • 基于Android的疫苗预约系统