From: Jan Stancek <jstancek(a)redhat.com>
redhat: switch the kernel package to use certs from system-sb-certs
Forward-port of c9s commit:
e155f90ed44e ("redhat: switch the kernel package to use certs from
system-sb-certs")
Conflicts: fedora and ELN doesn't have system-sb-certs
Both redhat and centos are providing now the public certificates we use
for secure boot signing through the redhat-sb-certs or centos-sb-certs
packages. Those provides the system-sb-certs "virtual" package.
Thus don't carry anymore the copy of the same certificates inside the
kernel sources, instead switch to use the certificates provided by those
packages.
This will enable secure boot signing for centos too, as centos uses a
different set of certificates for signing and we were not using them
in the package yet.
With this change, we also drop the usage of the beta certificates and
the switch to the release certs: they aren't provided in the new scheme
of system-sb-certs and anyway eg. grub2 isn't including/using those
certs for signing. If there are still any switching of keys needed,
ideally this should be done with the package providing system-sb-certs.
While reviewing/doing this change, I also noted some missing signkernel
macro guards were missing in the spec, which I added. Also, in the
install part where we copy files to the kernel-doc package, I
consolidated the logic and added missing signkernel/signmodules guards,
with the existing code things would break if you disabled any of those
options.
v2: change pesign_name_0 for CentOS as reported by Brian Stinson
Signed-off-by: Herton R. Krzesinski <herton(a)redhat.com>
Signed-off-by: Prarit Bhargava <prarit(a)redhat.com>
Signed-off-by: Jan Stancek <jstancek(a)redhat.com>
diff --git a/redhat/Makefile b/redhat/Makefile
index blahblah..blahblah 100644
--- a/redhat/Makefile
+++ b/redhat/Makefile
@@ -701,11 +701,7 @@ sources-rh: $(TARBALL) generate-testpatch-tmp setup-source
dist-configs-check
$(SOURCES)/
@cat $$(ls -1 $(SPECPACKAGE_NAME).changelog-* | sort -t '.' -k 3 -n -r) \
$(SOURCES)/kernel.changelog
- @if [
"$(RELEASED_KERNEL)" -ne 0 ]; then \
- cp keys/redhatsecureboot{302,501,601,ca3,ca5,ca6}.cer $(SOURCES)/; \
- else \
- cp keys/redhatsecureboot{401,ca4}.cer $(SOURCES)/; \
- fi
+ cp keys/redhatsecureboot{501,ca5}.cer $(SOURCES)/;
@for KABIARCH in $(ARCH_LIST); do \
cp kabi/Module.kabi_$$KABIARCH $(SOURCES)/; \
cp kabi/Module.kabi_dup_$$KABIARCH $(SOURCES)/; \
diff --git a/redhat/kernel.spec.template b/redhat/kernel.spec.template
index blahblah..blahblah 100644
--- a/redhat/kernel.spec.template
+++ b/redhat/kernel.spec.template
@@ -808,6 +808,10 @@ Source0: linux-%{tarfile_release}.tar.xz
Source1: Makefile.rhelver
Source2: kernel.changelog
+Source10: redhatsecurebootca5.cer
+Source13: redhatsecureboot501.cer
+
+%if %{signkernel}
# Name of the packaged file containing signing key
%ifarch ppc64le
%define signing_key_filename kernel-signing-ppc.cer
@@ -816,42 +820,36 @@ Source2: kernel.changelog
%define signing_key_filename kernel-signing-s390.cer
%endif
-%if %{?released_kernel}
+# Fedora/ELN pesign macro expects to see these cert file names, see:
+#
https://github.com/rhboot/pesign/blob/main/src/pesign-rpmbuild-helper.in#...
+%if 0%{?fedora}%{?eln}
+%define pesign_name_0 redhatsecureboot501
+%define secureboot_ca_0 %{SOURCE10}
+%define secureboot_key_0 %{SOURCE13}
+%endif
-Source10: redhatsecurebootca5.cer
-Source11: redhatsecurebootca3.cer
-Source12: redhatsecurebootca6.cer
-Source13: redhatsecureboot501.cer
-Source14: redhatsecureboot302.cer
-Source15: redhatsecureboot601.cer
+# RHEL/centos certs come from system-sb-certs
+%if 0%{?rhel} && !0%{?eln}
+%define secureboot_ca_0 %{_datadir}/pki/sb-certs/secureboot-ca-%{_arch}.cer
+%define secureboot_key_0 %{_datadir}/pki/sb-certs/secureboot-kernel-%{_arch}.cer
+%if 0%{?centos}
+%define pesign_name_0 centossecureboot201
+%else
%ifarch x86_64 aarch64
-%define secureboot_ca_0 %{SOURCE10}
-%define secureboot_key_0 %{SOURCE13}
%define pesign_name_0 redhatsecureboot501
%endif
%ifarch s390x
-%define secureboot_ca_0 %{SOURCE11}
-%define secureboot_key_0 %{SOURCE14}
%define pesign_name_0 redhatsecureboot302
%endif
%ifarch ppc64le
-%define secureboot_ca_0 %{SOURCE12}
-%define secureboot_key_0 %{SOURCE15}
%define pesign_name_0 redhatsecureboot601
%endif
+%endif
+# rhel && !eln
+%endif
-# released_kernel
-%else
-
-Source10: redhatsecurebootca4.cer
-Source11: redhatsecureboot401.cer
-
-%define secureboot_ca_0 %{SOURCE10}
-%define secureboot_key_0 %{SOURCE11}
-%define pesign_name_0 redhatsecureboot401
-
-# released_kernel
+# signkernel
%endif
Source20: mod-denylist.sh
@@ -1852,10 +1850,12 @@ done
openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem
openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem
cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem
+%if %{signkernel}
%ifarch s390x ppc64le
openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem
cat secureboot.pem >> ../certs/rhel.pem
%endif
+%endif
for i in *.config; do
sed -i
's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"(a)'
$i
done
@@ -2078,7 +2078,7 @@ BuildKernel() {
%ifarch s390x ppc64le
if [ -x /usr/bin/rpm-sign ]; then
rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output
vmlinuz.signed
- elif [ $DoModules -eq 1 ]; then
+ elif [ "$DoModules" == "1" -a "%{signmodules}" ==
"1" ]; then
chmod +x scripts/sign-file
./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage
vmlinuz.signed
else
@@ -2579,14 +2579,6 @@ BuildKernel() {
rm -f $RPM_BUILD_ROOT/mod-kvm.list
fi
-%if %{signmodules}
- if [ $DoModules -eq 1 ]; then
- # Save the signing keys so we can sign the modules in __modsign_install_post
- cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}}
- cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}}
- fi
-%endif
-
# Move the devel headers out of the root file system
mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
@@ -2610,18 +2602,29 @@ BuildKernel() {
# Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel
mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer
+%if %{signkernel}
install -m 0644 %{secureboot_ca_0}
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer
%ifarch s390x ppc64le
- if [ $DoModules -eq 1 ]; then
- if [ -x /usr/bin/rpm-sign ]; then
- install -m 0644 %{secureboot_key_0}
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
- else
- install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}}
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer
- openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
- chmod 0644
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
- fi
+ if [ -x /usr/bin/rpm-sign ]; then
+ install -m 0644 %{secureboot_key_0}
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
fi
%endif
+%endif
+
+%if %{signmodules}
+ if [ $DoModules -eq 1 ]; then
+ # Save the signing keys so we can sign the modules in __modsign_install_post
+ cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}}
+ cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}}
+ %ifarch s390x ppc64le
+ if [ ! -x /usr/bin/rpm-sign ]; then
+ install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}}
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer
+ openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform
der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
+ chmod 0644
$RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
+ fi
+ %endif
+ fi
+%endif
%if %{with_ipaclones}
MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p')
diff --git a/redhat/keys/redhatsecureboot302.cer b/redhat/keys/redhatsecureboot302.cer
deleted file mode 100644
index blahblah..blahblah 0
--- a/redhat/keys/redhatsecureboot302.cer
+++ /dev/null
Binary files a/redhat/keys/redhatsecureboot302.cer and /dev/null differ
diff --git a/redhat/keys/redhatsecureboot401.cer b/redhat/keys/redhatsecureboot401.cer
deleted file mode 100644
index blahblah..blahblah 0
--- a/redhat/keys/redhatsecureboot401.cer
+++ /dev/null
Binary files a/redhat/keys/redhatsecureboot401.cer and /dev/null differ
diff --git a/redhat/keys/redhatsecureboot601.cer b/redhat/keys/redhatsecureboot601.cer
deleted file mode 100644
index blahblah..blahblah 0
--- a/redhat/keys/redhatsecureboot601.cer
+++ /dev/null
diff --git a/redhat/keys/redhatsecurebootca3.cer b/redhat/keys/redhatsecurebootca3.cer
deleted file mode 100644
index blahblah..blahblah 0
--- a/redhat/keys/redhatsecurebootca3.cer
+++ /dev/null
Binary files a/redhat/keys/redhatsecurebootca3.cer and /dev/null differ
diff --git a/redhat/keys/redhatsecurebootca4.cer b/redhat/keys/redhatsecurebootca4.cer
deleted file mode 100644
index blahblah..blahblah 0
--- a/redhat/keys/redhatsecurebootca4.cer
+++ /dev/null
Binary files a/redhat/keys/redhatsecurebootca4.cer and /dev/null differ
diff --git a/redhat/keys/redhatsecurebootca6.cer b/redhat/keys/redhatsecurebootca6.cer
deleted file mode 100644
index blahblah..blahblah 0
--- a/redhat/keys/redhatsecurebootca6.cer
+++ /dev/null
--
https://gitlab.com/cki-project/kernel-ark/-/merge_requests/2849