赵泠 2025-12-28 01:00 采纳率: 98.9%
浏览 29
已采纳

Invalid signature detected. Check Secure Boot Policy in Setup

问题:系统启动时出现“Invalid signature detected. Check Secure Boot Policy in Setup”错误,导致无法进入操作系统。此问题通常发生在启用Secure Boot的UEFI模式下,当系统检测到引导加载程序或驱动程序未使用认证签名时触发。常见于安装非签名驱动、使用自定义内核或第三方启动工具(如某些Linux发行版或破解工具)后。即使恢复默认设置,错误仍可能持续。如何在确保系统安全的前提下,正确配置Secure Boot策略以解决签名验证失败问题?
  • 写回答

1条回答 默认 最新

  • 高级鱼 2025-12-28 08:48
    关注

    1. 问题背景与Secure Boot机制解析

    当系统启动时提示“Invalid signature detected. Check Secure Boot Policy in Setup”,这表明UEFI固件在执行Secure Boot验证过程中检测到引导加载程序、内核或驱动程序未通过数字签名认证。Secure Boot是UEFI规范中的一项安全功能,旨在防止恶意软件在预操作系统阶段加载未经验证的代码。

    其核心原理是:主板固件维护一个受信任的公钥数据库(PK, KEK, DB),所有引导组件(如bootloader、kernel、driver)必须由这些密钥对应的私钥签名,否则将被拒绝执行。该机制广泛应用于Windows 10/11及主流Linux发行版(如Ubuntu、RHEL)中以保障启动链完整性。

    典型触发场景包括:

    • 安装了未签名的第三方驱动程序
    • 使用自定义编译的Linux内核或initramfs
    • 部署基于GRUB自修改的启动管理器
    • 尝试运行某些破解工具或调试镜像
    • BIOS更新后策略重置但遗留旧引导项

    2. 故障诊断流程图(Mermaid格式)

    
    mermaid
    graph TD
        A[开机显示Invalid Signature错误] --> B{能否进入UEFI Setup?}
        B -- 能 --> C[检查Secure Boot状态]
        B -- 不能 --> D[尝试强制进入Setup: F2/Del/F10等]
        C --> E[确认Secure Boot是否Enabled]
        E -- Disabled --> F[启用Secure Boot并保存退出]
        E -- Enabled --> G[查看当前Policy模式]
        G --> H[判断为Standard/Custom Mode]
        H -- Standard --> I[仅允许微软/厂商签名镜像]
        H -- Custom --> J[可导入自定义密钥]
        I --> K[检查启动项是否含非认证组件]
        J --> L[考虑导入自定义公钥]
    
    

    3. 常见解决方案层级分析

    层级方法安全性影响适用场景持久性
    1临时禁用Secure Boot紧急恢复重启失效
    2清除PK恢复默认策略密钥污染后修复永久
    3导入自定义CA公钥(DB)企业定制系统永久
    4使用Shim+MOK机制(Linux)开源系统部署永久
    5重新签名引导组件极高合规环境永久
    6切换至Legacy BIOS模式极低兼容老旧系统永久

    4. 深度技术路径:基于Shim与MOK的安全引导配置

    对于运行Linux系统的用户,推荐采用shim-x64.efi作为第一级引导加载程序。Shim是由Canonical和Red Hat共同维护的已签名引导代理,它支持验证次级引导程序(如GRUB2)的签名,并可通过Machine Owner Key (MOK) 机制扩展信任链。

    操作步骤如下:

    1. 生成自定义密钥对:
      openssl req -newkey rsa:2048 -nodes -keyout MOK.priv -x509 -days 3650 -out MOK.crt
    2. 将公钥转换为EFI可识别格式:
      /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.crt $(your_module.ko)
    3. 使用mokutil注册公钥:
      sudo mokutil --import MOK.crt
    4. 重启并在MOK管理界面设置密码完成注册
    5. 重新签名所有自定义模块并部署

    此方案在保持Secure Boot开启的同时实现灵活控制,符合NIST SP 800-193等安全标准要求。

    5. UEFI变量与签名数据库管理

    高级用户可通过efivar、sbsigntools等工具直接操作UEFI签名数据库(db, dbx, KEK, PK)。例如:

    # 查看当前签名列表
    efivars -d | grep "Signature"
    
    # 导出平台密钥(PK)
    getvar PK -v | xxd -r -p > pk.auth
    
    # 使用私钥清除当前PK(需物理访问权限)
    sign-efi-sig-list -k priv.key -c cert.pem -o pk.auth empty PK
    
    

    注意:此类操作具有高风险,可能导致系统无法启动,建议在调试环境中先行验证。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 12月29日
  • 创建了问题 12月28日