내 키(PK, KEK 및 DB)를 사용하여 보안 부팅을 구성하고 있습니다. 지금까지 내가 한 모든 것:
- 통합 커널 이미지 구축(UKI)
- 독립형 GRUB 바이너리 만들기
- 자체 PK, KEK 및 DB 키를 생성하고 서명된 GRUB 및 UKI.
Secure Boot를 활성화하면 GRUB 및 Linux로 부팅할 수 있습니다. 하지만 저는 Windows를 이중 부팅하기도 하는데 여기서 문제가 시작됩니다. 지금까지 내 PK를 사용하여 Microsoft KEK CA에 서명하려고 시도했지만 내 노트북(Dell Precision 7740)은 "제대로 서명되지 않았기 때문에" KEK에 연결하는 것을 거부합니다. 또 다른 문제는 Microsoft DB 서명 인증서입니다. 어떻게 해야 할지 잘 모르겠습니다. Microsoft KEK에서 서명한 것입니까, 아니면 자체 KEK 서명을 사용해야 합니까?
아래에는 인증서를 생성하는 데 사용한 명령과 Microsoft 인증서를 가져오기 위해 시도한 작업이 나열되어 있습니다.
키 생성:
mkdir certs
cd certs
uuidgen --random > GUID.txt
openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=example PK/" -out PK.crt
openssl x509 -outform DER -in PK.crt -out PK.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth
openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=example KEK/" -out KEK.crt
openssl x509 -outform DER -in KEK.crt -out KEK.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=example DB/" -out db.crt
openssl x509 -outform DER -in db.crt -out db.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth
example
참고: 공유하고 싶지 않았기 때문에 실제 CN 이름을 그 이름으로 바꿨습니다 .
Microsoft 인증서로 수행하려는 작업:
# Certificates in PEM format are in the .crt files. I do this conversion, because otherwise some of the command below would fail and .auth file would not contain almost anything, only around ~30 bytes of arbitrary data)
openssl x509 -in microsoft_kek_ca_2011-06-24.bin -out microsoft_kek_ca_2011-06-24.crt
openssl x509 -outform DER -in microsoft_kek_ca_2011-06-24.crt -out microsoft_kek_ca_2011-06-24.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" microsoft_kek_ca_2011-06-24.cer microsoft_kek_ca_2011-06-24.esl
# Here I actually sign it. I don't get any errors and .auth file in size looks similar to other .auth files. But my Laptop still refuses to import it.
sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK microsoft_kek_ca_2011-06-24.esl microsoft_kek_ca_2011-06-24.auth
openssl x509 -in microsoft_windows_pca_2011-10-19.bin -out microsoft_windows_pca_2011-10-19.crt
openssl x509 -outform DER -in microsoft_windows_pca_2011-10-19.crt -out microsoft_windows_pca_2011-10-19.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" microsoft_windows_pca_2011-10-19.cer microsoft_windows_pca_2011-10-19.esl
# Here I gave up, the issue is that I need signed efi list (.auth) in order to import it to my BIOS. But in order to create signed list I would need KEK keys, and obvisly I don't own keys to Microsoft KEK, so I just tried signing it with my own KEK. Again, BIOS refuses to import it.
sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db microsoft_windows_pca_2011-10-19.esl microsoft_windows_pca_2011-10-19.auth
참고: 저는 Microsoft의 KEK와 DB를 다음에서 다운로드했습니다.공식 문서.
결론적으로, 나는 자체 PK, KEK 및 DB 키가 제공하는 제어가 필요하고 원하기 때문에 SHIM 또는 MOK를 사용하기를 꺼린다고 말하고 싶습니다. 나는 SHIM/MOK가 반쯤 구운/해결 방법이라고 생각합니다. 그리고 그것은 실제로 문제를 해결하지 못합니다. 대신 더티 픽스가 제공됩니다.
도움을 주셔서 미리 감사드립니다!
답변1
글쎄, Microsoft의 KEK에 성공적으로 서명하지 못한 동안 내 키를 사용하여 esp/EFI/Microsoft/Boot/bootmgr.efi 및 esp/EFI/Microsoft/Boot/bootmgtf.efi에 강제로 다시 서명했습니다. 예, Windows 업데이트 후 다시 로그인해야 할 수도 있지만 자동 업데이트를 비활성화했으므로 이러한 파일을 너무 자주 업데이트해서는 안 됩니다.