secureboot: Enable signing SONiC kernel (#10557)
Why I did it To sign SONiC kernel image and allow secure boot based system to verify SONiC image before loading into the system. How I did it Pass following parameter to rules/config.user Ex: SONIC_ENABLE_SECUREBOOT_SIGNATURE := y SIGNING_KEY := /path/to/key/private.key SIGNING_CERT := /path/to/public/public.cert How to verify it Secure boot enabled system enrolled with right public key of the, image in the platform UEFI database will able to verify image before load. Alternatively one can verify with offline sbsign tool as below. export SBSIGN_KEY=/abc/bcd/xyz/ sbverify --cert $SBSIGN_KEY/public_cert.cert fsroot-platform-XYZ/boot/vmlinuz-5.10.0-8-2-amd64 mage O/P: Signature verification OK
This commit is contained in:
parent
0a99f87bec
commit
598ab99469
@ -188,6 +188,17 @@ ifneq ($(SONIC_DPKG_CACHE_SOURCE),)
|
||||
DOCKER_RUN += -v "$(SONIC_DPKG_CACHE_SOURCE):/dpkg_cache:rw"
|
||||
endif
|
||||
|
||||
ifeq ($(SONIC_ENABLE_SECUREBOOT_SIGNATURE), y)
|
||||
ifneq ($(SIGNING_KEY),)
|
||||
DOCKER_SIGNING_SOURCE := $(shell dirname $(SIGNING_KEY))
|
||||
DOCKER_RUN += -v "$(DOCKER_SIGNING_SOURCE):$(DOCKER_SIGNING_SOURCE):ro"
|
||||
endif
|
||||
ifneq ($(SIGNING_CERT),)
|
||||
DOCKER_SIGNING_SOURCE := $(shell dirname $(SIGNING_CERT))
|
||||
DOCKER_RUN += -v "$(DOCKER_SIGNING_SOURCE):$(DOCKER_SIGNING_SOURCE):ro"
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(SONIC_CONFIG_USE_NATIVE_DOCKERD_FOR_BUILD), y)
|
||||
ifneq ($(MULTIARCH_QEMU_ENVIRON), y)
|
||||
DOCKER_RUN += -v /var/run/docker.sock:/var/run/docker.sock
|
||||
@ -295,6 +306,7 @@ SONIC_BUILD_INSTRUCTION := make \
|
||||
EXTRA_DOCKER_TARGETS=$(EXTRA_DOCKER_TARGETS) \
|
||||
BUILD_LOG_TIMESTAMP=$(BUILD_LOG_TIMESTAMP) \
|
||||
SONIC_ENABLE_IMAGE_SIGNATURE=$(ENABLE_IMAGE_SIGNATURE) \
|
||||
SONIC_ENABLE_SECUREBOOT_SIGNATURE=$(SONIC_ENABLE_SECUREBOOT_SIGNATURE) \
|
||||
SONIC_DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) \
|
||||
ENABLE_HOST_SERVICE_ON_START=$(ENABLE_HOST_SERVICE_ON_START) \
|
||||
SLAVE_DIR=$(SLAVE_DIR) \
|
||||
|
@ -143,6 +143,23 @@ if [[ $CONFIGURED_ARCH == amd64 ]]; then
|
||||
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install dmidecode hdparm
|
||||
fi
|
||||
|
||||
## Sign the Linux kernel
|
||||
if [ "$SONIC_ENABLE_SECUREBOOT_SIGNATURE" = "y" ]; then
|
||||
if [ ! -f $SIGNING_KEY ]; then
|
||||
echo "Error: SONiC linux kernel signing key missing"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f $SIGNING_CERT ]; then
|
||||
echo "Error: SONiC linux kernel signing certificate missing"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo '[INFO] Signing SONiC linux kernel image'
|
||||
K=$FILESYSTEM_ROOT/boot/vmlinuz-${LINUX_KERNEL_VERSION}-amd64
|
||||
sbsign --key $SIGNING_KEY --cert $SIGNING_CERT --output /tmp/${K##*/} ${K}
|
||||
sudo cp -f /tmp/${K##*/} ${K}
|
||||
fi
|
||||
|
||||
## Update initramfs for booting with squashfs+overlay
|
||||
cat files/initramfs-tools/modules | sudo tee -a $FILESYSTEM_ROOT/etc/initramfs-tools/modules > /dev/null
|
||||
|
||||
|
@ -180,6 +180,13 @@ K8s_GCR_IO_PAUSE_VERSION = 3.4.1
|
||||
# The relative path is build root folder.
|
||||
SONIC_ENABLE_IMAGE_SIGNATURE ?= n
|
||||
|
||||
# SONIC_ENABLE_SECUREBOOT_SIGNATURE - enable SONiC kernel signing to support UEFI secureboot
|
||||
# To support UEFI secureboot chain of trust requires EFI kernel to be signed as a PE binary
|
||||
# SIGNING_KEY =
|
||||
# SIGNING_CERT =
|
||||
# The absolute path should be provided.
|
||||
SONIC_ENABLE_SECUREBOOT_SIGNATURE ?= n
|
||||
|
||||
# PACKAGE_URL_PREFIX - the package url prefix
|
||||
PACKAGE_URL_PREFIX ?= https://packages.trafficmanager.net/public/packages
|
||||
|
||||
|
3
slave.mk
3
slave.mk
@ -1176,6 +1176,9 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
|
||||
TARGET_PATH=$(TARGET_PATH) \
|
||||
SONIC_ENFORCE_VERSIONS=$(SONIC_ENFORCE_VERSIONS) \
|
||||
TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) \
|
||||
SONIC_ENABLE_SECUREBOOT_SIGNATURE="$(SONIC_ENABLE_SECUREBOOT_SIGNATURE)" \
|
||||
SIGNING_KEY="$(SIGNING_KEY)" \
|
||||
SIGNING_CERT="$(SIGNING_CERT)" \
|
||||
PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \
|
||||
MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \
|
||||
./build_debian.sh $(LOG)
|
||||
|
@ -117,6 +117,7 @@ RUN apt-get update && apt-get install -y \
|
||||
devscripts \
|
||||
quilt \
|
||||
stgit \
|
||||
sbsigntool \
|
||||
# For platform-modules build
|
||||
module-assistant \
|
||||
# For thrift build\
|
||||
|
@ -125,6 +125,7 @@ RUN apt-get update && apt-get install -y \
|
||||
devscripts \
|
||||
quilt \
|
||||
stgit \
|
||||
sbsigntool \
|
||||
# For platform-modules build
|
||||
module-assistant \
|
||||
# For thrift build\
|
||||
|
Loading…
Reference in New Issue
Block a user