5.3. 在 AWS Marketplace 上配置具有安全引导的 RHEL 实例


要确保 AWS 上的 RHEL 实例有安全的操作系统引导过程,请使用安全引导。要在 AWS 上配置具有安全引导支持的 Red Hat Enterprise Linux (RHEL)实例,请从 AWS 市场启动 RHEL Amazon Machine Image (AMI),后者已预先配置了启用了 uefi-preferred 的引导模式。uefi-preferred 选项支持安全引导所需的统一可扩展固件接口(UEFI)引导装载程序。如果没有 UEFI,安全引导功能将无法正常工作。

警告

要避免安全问题,请生成私钥并将其与当前 RHEL 实例分开保存。如果安全引导 secret 存储在使用它们的同一实例上,则入侵者可以访问升级其特权的 secret 。有关启动 AWS EC2 实例的更多信息,请参阅 开始使用 Amazon EC2

先决条件

  1. RHEL AMI 在引导设置中启用了 uefi-preferred 选项:

    $ aws ec2 describe-images --image-id <ami-099f85fc24d27c2a7> --region <us-east-2> | grep -E '"ImageId"|"Name"|"BootMode"'
    
    "ImageId": "ami-099f85fc24d27c2a7",
    "Name": "RHEL-10.0.0_HVM_GA-20250423-x86_64-0-Hourly2-GP3",
    "BootMode": "uefi-preferred"
    Copy to Clipboard Toggle word wrap
  2. 您已在 RHEL 实例上安装了以下软件包:

    • awscli2
    • python3
    • openssl
    • efivar
    • keyutils
    • edk2-ovmf
    • python3-virt-firmware

流程

  1. 检查 RHEL Marketplace AMI 实例的平台状态:

    $ mokutil --sb-state
    
    SecureBoot disabled
    Platform is in Setup Mode
    Copy to Clipboard Toggle word wrap

    setup 模式允许在实例中更新安全引导 UEFI 变量。

  2. 创建一个新的随机通用唯一标识符(UUID),并将其存储在一个系统生成的文本文件中:

    $ uuidgen --random > GUID.txt
    Copy to Clipboard Toggle word wrap
  3. 为平台密钥数据库生成一个新的 PK.key RSA 私钥和自签名 PK.cer X.509 证书:

    $ openssl req -quiet \
    -newkey rsa:3072 \
    -nodes -keyout PK.key \
    -new -x509 -sha256 \
    -days 3650 \
    -subj "/CN=Platform key/" \
    -outform DER -out PK.cer
    Copy to Clipboard Toggle word wrap

    openssl 工具通过将输出格式设置为可辨识的编码规则(DER)来为证书生成一个通用名称 Platform key

  4. 为密钥交换密钥数据库生成一个新的 KEK.key RSA 私钥和自签名 KEK.cer X.509 证书:

    $ openssl req -quiet \
    -newkey rsa:3072 \
    -nodes -keyout KEK.key \
    -new -x509 -sha256 \
    -days 3650 \
    -subj "CN=Key Exchange Key/" \
    -outform DER -out KEK.cer
    Copy to Clipboard Toggle word wrap
  5. 生成一个 custom_db.cer 自定义证书:

    $ openssl req -quiet \
    -newkey rsa:3072 \
    -nodes -keyout custom_db.key \
    -new -x509 -sha256 \
    -days 3650 \
    -subj "/CN=Signature Database key/" \
    --outform DER -out custom_db.cer
    Copy to Clipboard Toggle word wrap
  6. 下载 Microsoft Corporation UEFI CA 2011 证书:

    $ wget https://go.microsoft.com/fwlink/p/?linkid=321194 --user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" -O MicCorUEFCA2011_2011-06-27.crt
    Copy to Clipboard Toggle word wrap
  7. 为 x64 位系统下载更新的禁止签名的 UEFI 撤销列表文件(dbx):

    $ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin
    Copy to Clipboard Toggle word wrap
  8. 使用 virt-fw-vars 工具生成 UEFI 变量文件:

    $ virt-fw-vars --set-pk "$(< GUID.txt)" PK.cer \
    --add-kek "$(< GUID.txt)" KEK.cer \
    --add-db "$(< GUID.txt)" custom_db.cer \
    --add-db 77fa9abd-0359-4d32-bd60-28f4e78f784b MicCorUEFCA2011_2011-06-27.crt \
    --set-dbx DBXUpdate.bin -i /usr/share/edk2/ovmf/OVMF_VARS.secboot.fd \
    --output VARS
    Copy to Clipboard Toggle word wrap

    详情请查看您系统上的 virt-fw-vars (1) 手册页。

  9. 将 UEFI 变量转换为可扩展固件接口(EFI)签名列表(ESL)格式:

    $ python3 /usr/share/doc/python3-virt-firmware/experimental/authfiles.py \
    --input VARS \
    --outdir .
    $ for f in PK KEK db dbx; do tail -c +41 $f.auth > $f.esl; done
    Copy to Clipboard Toggle word wrap
    注意

    每个 GUID 是一个分配的值,代表一个 EFI 参数

    • 8be4df61-93ca-11d2-aa0d-00e098032b8c: EFI_GLOBAL_VARIABLE_GUID
    • d719b2cb-3d3a-4596-a3bc-dad00e67656f: EFI_IMAGE_SECURITY_DATABASE_GUID

    EFI_GLOBAL_VARIABLE_GUID 参数维护可引导设备和引导管理器的设置,而 EFI_IMAGE_SECURITY_DATABASE_GUID 参数代表安全引导变量 db, dbx 的镜像安全数据库,以及所需密钥和证书的存储。

  10. 将数据库证书传到目标实例,使用 efivar 工具来管理 UEFI 环境变量。

    1. 要传输 PK.esl,请输入:

      # efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-PK -f PK.esl
      Copy to Clipboard Toggle word wrap
    2. 要传输 KEK.esl,请输入:

      # efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-KEK -f KEK.esl
      Copy to Clipboard Toggle word wrap
    3. 要传输 db.esl,请输入:

      # efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-db -f db.esl
      Copy to Clipboard Toggle word wrap
    4. 要传输 x64 架构的 dbx.esl UEFI 撤销列表文件,请输入:

      # efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx -f dbx.esl
      Copy to Clipboard Toggle word wrap
  11. 从 AWS 控制台重启实例。

验证

  1. 验证是否启用了安全引导:

    $ mokutil --sb-state
    
    SecureBoot enabled
    Copy to Clipboard Toggle word wrap
  2. 使用 keyctl 工具验证自定义证书的内核 keyring :

    $ sudo keyctl list %:.platform
    
    4 keys in keyring:
    786569360: ---lswrv     0     0 asymmetric: Signature Database key: 5856827178d376838611787277dc1d090c575759
    ...
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat