archboot/usr/bin/archboot-secureboot-keys.sh

90 lines
3 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# created by Tobias Powalowski <tpowa@archlinux.org>
. /usr/lib/archboot/common.sh
usage () {
2022-04-07 10:43:04 +02:00
echo -e "\033[1mGenerate Secure Boot keys,MOK files and backup existing keys:\033[0m"
echo -e "\033[1m-------------------------------------------------------------\033[0m"
echo "This script generates all needed keys for a Secure Boot setup."
echo -e "It will include the \033[1m2\033[0m needed Microsoft certificates, in order"
echo "to avoid soft bricking of devices."
echo -e "Backup of your existing keys are put to \033[1mBACKUP\033[0m directory."
echo ""
echo -e "\033[1m-Usage: -name= <directory>\033[0m"
echo ""
echo -e "\033[1m-PARAMETERS:\033[0m"
echo " -name= your name to embed in the keys"
echo " -h This message."
exit 0
}
[[ -z "${1}" || -z "${2}" ]] && usage
_DIR="$2"
while [ $# -gt 0 ]; do
case ${1} in
2022-01-21 11:40:32 +01:00
-name=*|--name=*) NAME="$(echo "${1}" | awk -F= '{print $2;}')" ;;
-h|--h|?) usage ;;
esac
shift
done
if [[ -z "${NAME}" ]]; then
2021-10-15 12:17:05 +02:00
echo "ERROR: no name specified"
usage
2022-12-29 12:49:26 +01:00
#shellcheck disable=2317
exit 1
fi
2022-04-07 10:43:04 +02:00
_root_check
2021-10-15 12:20:23 +02:00
# archboot
[[ -e /usr/bin/mkkeys.sh ]] && MKKEYS="mkkeys.sh"
# normal system
[[ -e /usr/bin/archboot-mkkeys.sh ]] && MKKEYS="archboot-mkkeys.sh"
2022-01-21 11:40:32 +01:00
if [[ -n "${_DIR}" ]]; then
[[ ! -d "${_DIR}" ]] && mkdir -p "${_DIR}"
cd "${_DIR}" || exit 1
echo "Backup old keys in $_DIR/BACKUP ..."
2021-10-16 23:14:46 +02:00
[[ ! -d "BACKUP" ]] && mkdir BACKUP
efi-readvar -v PK -o BACKUP/old_PK.esl
efi-readvar -v KEK -o BACKUP/old_KEK.esl
efi-readvar -v db -o BACKUP/old_db.esl
efi-readvar -v dbx -o BACKUP/old_dbx.esl
2022-01-21 11:40:32 +01:00
cd BACKUP || exit 1; mokutil --export; cd .. || exit 1
echo "Generating Keys in $_DIR"
# add mkkeys.sh
${MKKEYS} <<EOF
${NAME}
EOF
# download MS Certificates, else EFI might get broken!
curl -s -L -O https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
curl -s -L -O https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db.esl MicWinProPCA2011_2011-10-19.crt
sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db.esl MicCorUEFCA2011_2011-06-27.crt
cat MS_Win_db.esl MS_UEFI_db.esl > MS_db.esl
sign-efi-sig-list -a -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -k KEK.key -c KEK.crt db MS_db.esl add_MS_db.auth
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt -nodes -days 3650 -subj "/CN=${NAME}/"
openssl x509 -in MOK.crt -out MOK.cer -outform DER
DIRS="DB KEK MOK PK noPK"
for i in $DIRS; do
2022-01-21 11:40:32 +01:00
[[ ! -d "$i" ]] && mkdir "$i"
2022-04-06 22:32:06 +02:00
mv "${i}".* "${i}"
done
2021-10-16 09:41:42 +02:00
mv DB db
2021-10-16 23:14:46 +02:00
[[ ! -d "GUID" ]] && mkdir GUID
[[ ! -d "MS" ]] && mkdir MS
mv myGUID.txt GUID
2022-01-21 11:40:32 +01:00
mv ./*.crt ./*.auth ./*.esl MS
cd ..
2022-01-21 11:40:32 +01:00
chmod 700 "${_DIR}"
echo "Finished: Keys created in ${_DIR}"
else
2021-10-15 12:17:05 +02:00
echo "ERROR: no directory specified"
usage
2022-12-29 12:49:26 +01:00
#shellcheck disable=2317
exit 1
fi