搜索

19.11. 使用私钥签名内核模块

download PDF

如果启用了 UEFI 安全引导机制,您可以通过加载签名的内核模块来提高系统的安全性。

在禁用了 UEFI 安全引导的系统上或非 UEFI 系统上,您签名的内核模块也是可以加载的。因此,您不需要提供内核模块的签名和未签名版本。

先决条件

流程

  1. 将您的公钥导出到 sb_cert.cer 文件中:

    # certutil -d /etc/pki/pesign \
               -n 'Custom Secure Boot key' \
               -Lr \
               > sb_cert.cer
  2. 从 NSS 数据库中提取密钥作为 PKCS #12 文件:

    # pk12util -o sb_cert.p12 \
               -n 'Custom Secure Boot key' \
               -d /etc/pki/pesign
  3. 当上一命令提示您时,输入加密了私钥的新密码。
  4. 导出未加密的私钥:

    # openssl pkcs12 \
             -in sb_cert.p12 \
             -out sb_cert.priv \
             -nocerts \
             -noenc
    重要

    请谨慎处理未加密的私钥。

  5. 为内核模块签名。以下命令将签名直接附加到内核模块文件中的 ELF 镜像中:

    # /usr/src/kernels/$(uname -r)/scripts/sign-file \
              sha256 \
              sb_cert.priv \
              sb_cert.cer \
              my_module.ko

您的内核模块现在可以被加载。

重要

在 Red Hat Enterprise Linux 9 中,密钥对的有效性日期很重要。这个密钥没有过期,但必须在其签名密钥的有效周期内对内核模块进行签名。sign-file 实用程序不会提醒您这样做。例如,一个只在 2021 年有效的密钥可用于验证在 2021 年使用该密钥签名的内核模块。但是,用户无法使用该密钥在 2022 年签发内核模块。

验证

  1. 显示关于内核模块签名的信息:

    # modinfo my_module.ko | grep signer
      signer:         Your Name Key

    检查签名中是否列出了您在生成过程中输入的名称。

    注意

    附加的签名不包含在 ELF 镜像部分,不是 ELF 镜像的一个正式部分。因此,readelf 等工具无法在内核模块上显示签名。

  2. 载入模块:

    # insmod my_module.ko
  3. 删除(卸载)模块:

    # modprobe -r my_module.ko
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.