12.2. 了解 UEFI 安全启动密钥层次结构


引导映像的密码密封依赖于 UEFI Secure Boot 来验证引导工件的完整性。Secure Boot 使用三种密钥类型的层次结构来建立信任链。

平台密钥(PK)
PK 充当安全引导信任层次结构的根。每个系统都恰好包含一个PK,用于控制对安全启动密钥数据库的访问,并签署对KEK数据库的更新。注册PK会将固件从设置模式转换到用户模式,从而实现安全启动实施。
密钥交换密钥(KEK)
系统可以注册一个或多个 KEK。KEK授权更新签名数据库(db)。此密钥启用委派:PK 所有者授权其他方管理受信任的签名密钥,而不会放弃对安全启动配置的完全控制。
签名数据库(数据库)

db 包含固件用于验证引导二进制文件的密钥或哈希。当固件加载引导加载程序或统一内核映像(UKI)时,它会对照数据库中的密钥检查二进制文件的签名。如果签名与数据库条目匹配,二进制文件将执行。

注意

如果您的基础架构已经使用已设置的安全启动密钥,请跳过生成新密钥。您只需要访问数据库密钥,或者能够将签名密钥添加到现有数据库中,即可对 UKI 进行签名。

12.2.1. 生成用于图像密封的安全启动密钥

要签名并验证密封的引导映像,请生成一整套 UEFI 安全引导密钥。此过程创建平台密钥 (PK)、密钥交换密钥 (KEK) 和签名数据库 (db) 密钥。

先决条件

  • openssl 软件包已安装。
  • RHEL 上的 util-linux 软件包中的 uuidgen 命令可用于生成 UUID。
  • 可以使用安全位置存储私钥文件。
重要

对于生产部署,请使用硬件安全模块 (HSM) 或专用密钥管理系统,而不是在文件系统上存储私钥。本程序中的示例直接使用 openssl 来简化。

流程

  1. 生成全局唯一标识符 (GUID) 以标识密钥所有者:

    $ uuidgen --random > <GUID.txt>
  2. 生成平台密钥(PK):

    $ openssl req -newkey rsa:2048 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj '/CN=<My Platform Key>/' -out PK.crt
  3. 将 GUID 转换为固件注册的 DER 编码证书:

    $ openssl x509 -outform DER -in PK.crt -out PK.cer

    该命令生成用于签名的私钥(PK.key)、用于签名操作的PEM证书(PK.crt)和用于固件注册的DER编码证书(PK.cer)。您必须使用适当的访问控制来保护私钥文件。

  4. 生成密钥交换密钥(KEK):

    $ openssl req -newkey rsa:2048 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj '/CN=<My Key Exchange Key>/' -out KEK.crt
  5. 将 KEK 转换为固件注册的 DER 编码证书:

    $ openssl x509 -outform DER -in KEK.crt -out KEK.cer
  6. 生成签名数据库(数据库)密钥:

    $ openssl req -newkey rsa:2048 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj '/CN=<MySignature Database Key>/' -out db.crt
  7. 将其转换为固件注册的 DER 编码证书:

    $ openssl x509 -outform DER -in db.crt -out db.cer

验证

  • 验证系统是否成功生成了所有密钥和文本文件:

    $ ls -1 PK.key PK.crt PK.cer KEK.key KEK.crt KEK.cer db.key db.crt db.cer <GUID.txt>
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部