Linux 커널 서명 후 서명 오류

Linux 커널 서명 후 서명 오류

운영 체제:우분투 20.04

기계: 델 XPS 13 9370

Linux 커널을 로 업그레이드해 보십시오 5.13.0. 5.16.14커널은 보안 부팅 없이 제대로 작동하는 것으로 확인되었습니다 5.16.14. 설명을 따르세요여기그리고여기모든 단계가 성공적으로 완료된 것 같습니다. 구체적으로 다음 단계를 수행했습니다.

커널 파일 다운로드

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-headers-5.16.14-051614_5.16.14-051614.202203111231_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-image-unsigned-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-modules-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb

커널 설치

chmod +x *.deb
sudo dpkg -i *.deb

요청 파일 생성

vim mokconfig.cnf # filled in details as instructed in articles

키 생성

openssl req -config ./mokconfig.cnf \
         -new -x509 -newkey rsa:2048 \
         -nodes -days 36500 -outform DER \
         -keyout "MOK.priv" \
         -out "MOK.der"

pem 형식으로 변환

openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem

등록 키

sudo mokutil --import MOK.der

이때 재부팅을 했더니 예상대로 파란색 MOK 화면이 나타났습니다. 방금 등록한 키가 표시되며 키를 추가한 후 계속 부팅할 수 있습니다.

키가 등록되었는지 확인하세요.

sudo mokutil --list-enrolled

커널에 서명

sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-5.16.14-051614-generic --output /boot/vmlinuz-5.16.14-051614-generic.signed

initram 복사

sudo cp /boot/initrd.img-5.16.14-051614-generic{,.signed}

GRUB 업데이트

sudo update-grub

또한 방금 만든 인증서를 BIOS의 보안 부팅 키에 연결했습니다. UI에 "성공" 메시지가 표시되고 키 수가 1씩 증가합니다.

이 시점에서 재부팅하고 새로 서명된 커널을 볼 수 있습니다. 원래 커널 외에도 목록에는 다음 두 줄이 포함됩니다.

Ubuntu, with Linux 5.16.14-051614-generic.signed
Ubuntu, with Linux 5.16.14-051614-generic.signed (recovery mode)

결과 메시지는 다음과 같습니다.

Loading Linux 5.16.14-051614-generic.signed ...
error: /boot/vmlinuz-5.16.14-051614-generic.signed has invalid signature.
Loading initial ramdisk ...
error: you need to load the kernel first.

Press any key to continue...

램디스크 문제는 설명이 필요 없는 것 같지만 커널을 로드할 수 없는 것 같습니다.

키를 확인할 수 있는 다른 방법이 있나요? 시스템이 인식하려면 다른 곳에 로드해야 합니까?

답변1

보안 부팅의 다양한 펌웨어 구현은 서명된 부팅 파일의 정확한 형식과 관련하여 다양한 수준의 엄격성을 갖습니다. 나는 이 sbsign명령이 오래된 도구이며 생성된 서명이 더 새롭고 엄격한 펌웨어 구현을 충족하지 못할 수 있다고 생각합니다.

pesign(패키지에 있는) 명령을 사용하여 커널에 서명해 보십시오 pesign. sbsign. 그러나 먼저 키와 인증서를 PKCS12 형식으로 변환하고 이를 Mozilla NSS 인증서 데이터베이스에 저장해야 합니다. 이렇게 하려면 pk12util패키지의 도구가 필요합니다.libnss3-tools

openssl pkcs12 -export -name MOK -out MOK.p12 -inkey MOK.priv -inform DER -in MOK.der
sudo pk12util -i MOK.p12 -d /etc/pki/pesign 

위 명령은 한 번만 실행하면 됩니다. 이 작업을 완료한 후에는 pesign다음과 같이 사용할 수 있습니다.

sudo pesign -i /boot/vmlinuz-5.16.14-051614-generic -o /boot/vmlinuz-5.16.14-051614-generic.signed -n /etc/pki/pesign -c MOK -s

관련 정보