本文主要针对:
开启 Secure Boot 后出现SecureBoot Failure
且检查发现:
bootmgfw signature CA : Windows UEFI CA 2023
但 BIOS 中缺少:
- Microsoft Corporation KEK 2K CA 2023
- Windows UEFI CA 2023
的情况。
如果你的故障原因不同,请勿直接照搬。
警告:在进行任何操作之前,请务必备份电脑内的重要数据,并提前了解如何恢复BIOS出厂密钥、如何重置BIOS,乃至于如何重刷BIOS乃至售后换主板。
微软2011年的安全启动证书将在这个月内过期。虽然微软说不更新证书也不会影响正常开机,但是有许多例外情况:
- 主板BIOS内的安全启动证书与系统Boot Manager的证书不匹配
- 部分UEFI比较严格
这种情况下,开启安全启动会导致无法进系统,必须关闭安全启动才能进系统
Windows的安全启动更新流程无法在禁用安全启动时进行,而开启安全启动又无法进系统,因此只能尝试手动在BIOS里写入安全启动证书
一般情况下,需要更新厂商提供的BIOS更新,但是部分厂商没有提供BIOS更新,另外还会出现特殊情况,即系统Boot Manager还是旧版证书,BIOS更新成了新版并吊销旧版证书,一样会无法启动
进行下列操作之前,请务必关闭BitLocker(设备加密)功能,并等待磁盘完全解密完毕!
首先,关闭BIOS里的安全启动。部分电脑需要先给BIOS设置密码才能关闭安全启动,请务必牢记密码,如果忘记密码只能售后了
然后,下载最新更新版的Windows系统镜像,双击挂载,双击Setup.exe就地保留数据升级/重装
然后,以管理员权限运行PowerShell,依次输入这四个命令
[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI db).bytes) -match'Windows UEFI CA 2023'
[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI db).bytes) -match'Microsoft UEFI CA 2023'
[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI db).bytes) -match 'Option ROM UEFI CA 2023'
[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI kek).bytes) -match 'KEK 2K CA 2023'
如果输出结果为True,则表明BIOS里面存在那个证书,False则表示不存在。
如果是False,且开启安全启动的情况下无法进系统,需要使用这个项目
将整个代码仓库ZIP下载下来并解压,或者git clone https://github.com/cjee21/Check-UEFISecureBootVariables.git下来
右键单击Check UEFI PK, KEK, DB and DBX.cmd以管理员身份运行。
在输出结果里,检查Current UEFI KEK和Current UEFI DB里,2023结尾的证书前面是不是对勾,如果不是对勾而是打叉,说明BIOS里没有新证书
右键单击Check Windows state.cmd以管理员身份运行。
如果输出里有
WindowsUEFICA2023Capable : Windows UEFI CA 2023 cert is not in DB
和
bootmgfw signature CA : Windows UEFI CA 2023
说明你的BIOS里没有2023证书,但Windows Boot Manager已经换成了2023证书
使用Apply 2023 KEK, DB and bootmgfw update.cmd,或者运行
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Secureboot /v AvailableUpdates /t REG_DWORD /d 0x5944 /f
Start-ScheduledTask -TaskName "\Microsoft\Windows\PI\Secure-Boot-Update"
无法在未开启安全启动的情况下安装证书,但是开启安全启动又无法进系统,因此必须手动更新证书。一般情况下,需要更新厂商提供的BIOS更新,但是部分厂商没有提供BIOS更新。
这时需要这样
警告:以下操作存在风险
右键单击Show UEFI PK, KEK, DB and DBX.cmd以管理员身份运行。
滚动到输出最上面,把Thumbprint复制下来备用
打开这个链接
secureboot_objects/PostSignedObjects/KEK/kek_update_map.json at main · microsoft/secureboot_objects
按Ctrl+F查找上面复制的Thumbprint
- 如果能找到:根据品牌和文件名下载正确的.bin文件。
- 如果找不到:请直接换电脑
在这个链接里
secureboot_objects/PostSignedObjects/KEK at main · microsoft/secureboot_objects
找到你的电脑品牌,然后寻找上一步Thumbprint所对应的KEKUpdate的bin文件,下载
获取SplitDbxContent.ps1脚本,用于在Windows上拆分.bin文件:
Install-Script -Name SplitDbxContent
在PowerShell中执行以下操作以拆分已签名包
SplitDbxContent.ps1 文件名.bin
建议把拆分出的两个文件放到新建的单独的KEK文件夹里
然后,以管理员身份运行PowerShell,执行以下命令
Set-SecureBootUefi -AppendWrite -Name KEK -ContentFilePath content.bin -SignedFilePath signature.p7 -Time 2010-03-06T19:17:21Z
请根据需要替换文件路径(不要修改文件名)。
如果成功,将返回一个显示名称、字节、属性的表。如果失败,会提示0xC0000022
右键单击Check UEFI PK, KEK, DB and DBX.cmd以管理员身份运行。
在输出里,如果Current UEFI KEK的Microsoft Corporation KEK CA 2023前面打勾,说明证书写入了
不要重启
在这个链接里
secureboot_objects/PostSignedObjects/Optional/DB at main · microsoft/secureboot_objects
按照你的处理器架构下载对应的DBUpdate2024.bin
在PowerShell中执行以下操作以拆分已签名包
SplitDbxContent.ps1 文件名.bin
建议把拆分出的两个文件放到新建的单独的DB文件夹里
然后,以管理员身份运行PowerShell,执行以下命令
Set-SecureBootUefi -AppendWrite -Name DB -ContentFilePath content.bin -SignedFilePath signature.p7 -Time 2010-03-06T19:17:21Z
请根据需要替换文件路径(不要修改文件名)。
右键单击Check UEFI PK, KEK, DB and DBX.cmd以管理员身份运行。
在输出里,如果Current UEFI DB的Windows UEFI CA 2023前面打勾,说明证书写入了
重启进BIOS打开安全启动(不要恢复BIOS出厂密钥),保存,应该能进系统了
进系统后,以管理员身份运行PowerShell,执行以下命令
Start-ScheduledTask -TaskName "\Microsoft\Windows\PI\Secure-Boot-Update"
等待几分钟
以管理员身份运行PowerShell,执行以下命令
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\Servicing
在输出里,检查UEFICA2023Status是不是Updated
打开设置→Windows更新检查更新,按照提示安装更新并重启
重启后,右键单击Check UEFI PK, KEK, DB and DBX.cmd以管理员身份运行
如果Microsoft Corporation KEK 2K CA 2023、Windows UEFI CA 2023、Microsoft UEFI CA 2023、Microsoft Option ROM UEFI CA 2023前面全是对勾,说明证书已写入
打开Windows安全中心→设备安全性,看看安全启动一栏是不是这样
安全启动
安全启动已启用,并且已应用所有必需的证书更新。无需进一步的证书更改。
如果是,说明完成了