mirror of
https://github.com/vyos/vyos-build.git
synced 2025-10-01 20:28:40 +02:00
Merge pull request #930 from c-po/T861-secure-boot
T861: minor improvements to secure-boot certificate handling
This commit is contained in:
commit
d552f7f8c3
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,11 +1,12 @@
|
|||||||
|
.build/config
|
||||||
build/*
|
build/*
|
||||||
|
config/*
|
||||||
*.pyc
|
*.pyc
|
||||||
packer_build/*
|
packer_build/*
|
||||||
packer_cache/*
|
packer_cache/*
|
||||||
key/*
|
key/*
|
||||||
packages/*
|
packages/*
|
||||||
!packages/*/
|
!packages/*/
|
||||||
data/live-build-config/includes.chroot/var/lib/shim-signed/mok/*
|
|
||||||
/testinstall*.img
|
/testinstall*.img
|
||||||
/testinstall*.efivars
|
/testinstall*.efivars
|
||||||
/*.qcow2
|
/*.qcow2
|
||||||
|
|||||||
2
Makefile
2
Makefile
@ -79,7 +79,7 @@ clean:
|
|||||||
rm -f config/binary config/bootstrap config/chroot config/common config/source
|
rm -f config/binary config/bootstrap config/chroot config/common config/source
|
||||||
rm -f build.log
|
rm -f build.log
|
||||||
rm -f vyos-*.iso
|
rm -f vyos-*.iso
|
||||||
rm -f *.img
|
rm -f *.img *.efivars
|
||||||
rm -f *.xz
|
rm -f *.xz
|
||||||
rm -f *.vhd
|
rm -f *.vhd
|
||||||
rm -f *.raw
|
rm -f *.raw
|
||||||
|
|||||||
1
data/certificates/.gitignore
vendored
Normal file
1
data/certificates/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.key
|
||||||
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
SIGN_FILE=$(find /usr/lib -name sign-file)
|
SIGN_FILE=$(find /usr/lib -name sign-file)
|
||||||
MOK_KEY="/var/lib/shim-signed/mok/MOK.key"
|
KERNEL_KEY="/var/lib/shim-signed/mok/vyos-dev-2025-linux.key"
|
||||||
MOK_CERT="/var/lib/shim-signed/mok/MOK.pem"
|
KERNEL_CERT="/var/lib/shim-signed/mok/vyos-dev-2025-linux.pem"
|
||||||
VMLINUZ=$(readlink /boot/vmlinuz)
|
VMLINUZ=$(readlink /boot/vmlinuz)
|
||||||
|
|
||||||
# All Linux Kernel modules need to be cryptographically signed
|
# All Linux Kernel modules need to be cryptographically signed
|
||||||
@ -13,10 +13,19 @@ find /lib/modules -type f -name \*.ko | while read MODULE; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ ! -f ${MOK_KEY} ]; then
|
if [ ! -f ${KERNEL_KEY} ] && [ ! -f ${KERNEL_CERT} ]; then
|
||||||
echo "I: Signing key for Linux Kernel not found - Secure Boot not possible"
|
echo "I: Signing key for Linux Kernel not found - Secure Boot not possible"
|
||||||
else
|
else
|
||||||
echo "I: Signing Linux Kernel for Secure Boot"
|
echo "I: Signing Linux Kernel for Secure Boot"
|
||||||
sbsign --key ${MOK_KEY} --cert ${MOK_CERT} /boot/${VMLINUZ} --output /boot/${VMLINUZ}
|
sbsign --key ${KERNEL_KEY} --cert ${KERNEL_CERT} /boot/${VMLINUZ} --output /boot/${VMLINUZ}
|
||||||
sbverify --list /boot/${VMLINUZ}
|
sbverify --list /boot/${VMLINUZ}
|
||||||
|
rm -f ${KERNEL_KEY}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
for cert in $(ls /var/lib/shim-signed/mok/); do
|
||||||
|
if grep -rq "BEGIN PRIVATE KEY" /var/lib/shim-signed/mok/${cert}; then
|
||||||
|
echo "Found private key - bailing out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +0,0 @@
|
|||||||
# Secure Boot
|
|
||||||
|
|
||||||
## CA
|
|
||||||
|
|
||||||
Create Certificate Authority used for Kernel signing. CA is loaded into the
|
|
||||||
Machine Owner Key store on the target system.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
openssl req -new -x509 -newkey rsa:4096 -keyout MOK.key -outform DER -out MOK.der -days 36500 -subj "/CN=VyOS Secure Boot CA/" -nodes
|
|
||||||
openssl x509 -inform der -in MOK.der -out MOK.pem
|
|
||||||
```
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
# This Dockerfile is installable on both x86, x86-64, armhf and arm64 systems
|
# This Dockerfile is installable on both x86, x86-64, armhf and arm64 systems
|
||||||
ARG ARCH=
|
ARG ARCH=
|
||||||
FROM ${ARCH}debian:bookworm
|
FROM ${ARCH}debian:bookworm-slim
|
||||||
|
|
||||||
RUN grep "VERSION_ID" /etc/os-release || (echo 'VERSION_ID="12"' >> /etc/os-release)
|
RUN grep "VERSION_ID" /etc/os-release || (echo 'VERSION_ID="12"' >> /etc/os-release)
|
||||||
|
|
||||||
|
|||||||
@ -398,6 +398,16 @@ try:
|
|||||||
|
|
||||||
loginVM(c, log)
|
loginVM(c, log)
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Check for no private key contents within the image
|
||||||
|
#################################################
|
||||||
|
msg = 'Found private key - bailing out'
|
||||||
|
c.sendline(f'if sudo grep -rq "BEGIN PRIVATE KEY" /var/lib/shim-signed/mok; then echo {msg}; exit 1; fi')
|
||||||
|
tmp = c.expect([f'\n{msg}', op_mode_prompt])
|
||||||
|
if tmp == 0:
|
||||||
|
log.error(msg)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
#################################################
|
#################################################
|
||||||
# Installing into VyOS system
|
# Installing into VyOS system
|
||||||
#################################################
|
#################################################
|
||||||
@ -879,7 +889,7 @@ except pexpect.exceptions.ExceptionPexpect:
|
|||||||
EXCEPTION = 1
|
EXCEPTION = 1
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
log.error('Unknown error occured while VyOS!')
|
log.error('Unknown error occured!')
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
EXCEPTION = 1
|
EXCEPTION = 1
|
||||||
|
|
||||||
|
|||||||
@ -367,6 +367,11 @@ if __name__ == "__main__":
|
|||||||
shutil.copytree("data/live-build-config/", lb_config_dir)
|
shutil.copytree("data/live-build-config/", lb_config_dir)
|
||||||
os.makedirs(lb_config_dir, exist_ok=True)
|
os.makedirs(lb_config_dir, exist_ok=True)
|
||||||
|
|
||||||
|
## Secure Boot - Copy public Keys to image
|
||||||
|
sb_certs = 'data/certificates'
|
||||||
|
if os.path.isdir(sb_certs):
|
||||||
|
shutil.copytree(sb_certs, f'{lb_config_dir}/includes.chroot/var/lib/shim-signed/mok')
|
||||||
|
|
||||||
# Switch to the build directory, this is crucial for the live-build work
|
# Switch to the build directory, this is crucial for the live-build work
|
||||||
# because the efective build config files etc. are there.
|
# because the efective build config files etc. are there.
|
||||||
#
|
#
|
||||||
@ -611,6 +616,7 @@ DOCUMENTATION_URL="{build_config['documentation_url']}"
|
|||||||
## Configure live-build
|
## Configure live-build
|
||||||
lb_config_tmpl = jinja2.Template("""
|
lb_config_tmpl = jinja2.Template("""
|
||||||
lb config noauto \
|
lb config noauto \
|
||||||
|
--no-color \
|
||||||
--apt-indices false \
|
--apt-indices false \
|
||||||
--apt-options "--yes -oAPT::Get::allow-downgrades=true" \
|
--apt-options "--yes -oAPT::Get::allow-downgrades=true" \
|
||||||
--apt-recommends false \
|
--apt-recommends false \
|
||||||
|
|||||||
@ -36,12 +36,13 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Change name of Signing Cert
|
# Change name of Signing Cert
|
||||||
sed -i -e "s/CN =.*/CN=VyOS build time autogenerated kernel key/" certs/default_x509.genkey
|
sed -i -e "s/CN =.*/CN=VyOS Networks build time autogenerated Kernel key/" certs/default_x509.genkey
|
||||||
|
|
||||||
TRUSTED_KEYS_FILE=trusted_keys.pem
|
TRUSTED_KEYS_FILE=trusted_keys.pem
|
||||||
# start with empty key file
|
# start with empty key file
|
||||||
echo -n "" > $TRUSTED_KEYS_FILE
|
echo -n "" > $TRUSTED_KEYS_FILE
|
||||||
CERTS=$(find ../../../../data/live-build-config/includes.chroot/var/lib/shim-signed/mok -name "*.pem" -type f || true)
|
GIT_ROOT=$(git rev-parse --show-toplevel)
|
||||||
|
CERTS=$(find ${GIT_ROOT}/data/certificates -name "*.pem" -type f || true)
|
||||||
if [ ! -z "${CERTS}" ]; then
|
if [ ! -z "${CERTS}" ]; then
|
||||||
# add known public keys to Kernel certificate chain
|
# add known public keys to Kernel certificate chain
|
||||||
for file in $CERTS; do
|
for file in $CERTS; do
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user