Red Hat Training

A Red Hat training course is available for RHEL 8

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

如果启用了 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 \
             -nodes
    重要

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

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

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

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

重要

在 RHEL 8 中,密钥对的有效性日期非常重要。这个密钥没有过期,但必须在其签名密钥的有效周期内对内核模块进行签名。sign-file 实用程序不会提醒您这样做。例如:一个只在 2019 年有效的密钥可用来验证在 2019 年中使用该密钥签名的内核模块。但是,用户无法使用这个密钥在 2020 年签注一个内核模块。

验证

  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