Menu Fermer

Erreur debian/canonical-certs.pem sur compilation du noyau

Lors de la compilation du noyau Linux sur une distribution de type Debian comme Ubuntu ou Mint, vous pouvez rencontrer une erreur make du type :

make[1]: *** Aucune règle pour fabriquer la cible « debian/canonical-certs.pem », nécessaire pour « certs/x509_certificate_list ». Arrêt.
make: *** [Makefile:1852 : certs] Erreur 2

Une variante peut être :

make[1]: *** Aucune règle pour fabriquer la cible « debian/canonical-revoked-certs.pem », nécessaire pour « certs/x509_revocation_list ». Arrêt.
make: *** [Makefile:1852 : certs] Erreur 2

Enfin si vous tentez de compiler le noyau Linux sur Debian, le fichier mentionné sera certs/debian-uefi-certs.pem.

Dans ce tutoriel, je vous aide à résoudre cette erreur de compilation du noyau Linux.

Erreur debian/canonical-certs.pem sur compilation du noyau

Quelle est l’origine de cette erreur de compilation du noyau ?

Les fichiers du noyau Linux (vmlinuz, System.map et initdr) peuvent être signés numériquement afin de répondre aux normes de sécurité des PC UEFI.
Cela nécessite la présence de clés de certificat électronique (fichier PEM) présents dans le répertoire certs des sources du noyau Linux.

L’erreur se produit si vous tentez de compiler les sources du noyau Linux en les ayant pris depuis le site kernel.org.
En effet, ces derniers ne contiennent pas les clés cryptographiques pour signer les fichiers du noyau Linux.
Cela provoque alors l’erreur make indiquée en début d’article car la signature numérique ne pourra se faire.

make[1]: *** Aucune règle pour fabriquer la cible « debian/canonical-certs.pem », nécessaire pour « certs/x509_certificate_list ». Arrêt.
make: *** [Makefile:1852 : certs] Erreur 2

Si vous tentez de compiler depuis les sources du noyau Linux de votre distribution, soit donc depuis les dépôts, vous ne devriez pas être confronté à cette erreur à moins que les fichiers de certificats soient mal déclarés dans le fichier .config

Résoudre l’erreur make debian/canonical-certs.pem sur compilation du noyau

Méthode 1 – copier les certificats Canonical ou Debian

Cette méthode consiste à récupérer les clés des certificats depuis les sources du kernel Linux de votre distribution.
On télécharge les sources puis on copie les fichiers de clés de certificats dans les sources kernel.org.

Dans cet exemple :

  • Les sources du noyau Linux d’Ubuntu sont en 5.15.0
  • Les sources de kernel.org sont en 6.0.5

Voici comment opérer :

  • Téléchargez les sources du noyau Linux :
sudo apt-get install linux-source
  • Puis copiez les certificats dans le répertoire certs de vos sources du noyau Linux. Utilisez la commande suivante en remplaçant les versions du kernel Linux :
cd /usr/src/linux
sudo cp -v linux-source-*/debian/certs/*pem linux-6.0.5/certs/
Résoudre l'erreur make debian/canonical-certs.pem sur compilation du noyau
  • Editez le fichier de configuration de compilation du noyau Linux :
cd /usr/src/linux-6.0.5
vim .config
  • Enregistrez les modifications du fichier puis relancez la compilation du noyau Linux :
make clean
  • Si tout va bien la compilation passe la phase CERT et L’erreur make Aucune règle pour fabriquer la cible « debian/canonical-certs.pem est corrigée
Résoudre l'erreur make debian/canonical-certs.pem sur compilation du noyau

Méthode 2 – Désactiver la signature du noyau Linux

La seconde méthode consiste simplement à retirer les fichiers de certificats du fichier .config.
Ainsi le noyau Linux ne sera plus signés.

  • Editez le fichier de configuration de compilation du noyau Linux :
vim .config
  • Puis cherchez les lignes suivantes, environ autour de la ligne 11134 :
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
CONFIG_MODULE_SIG_KEY_TYPE_ECDSA=y
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
# end of Certificates for signature checking
Résoudre l'erreur make debian/canonical-certs.pem sur compilation du noyau
  • Editez la ligne suivante pour retirer le chemin des clés :
CONFIG_SYSTEM_TRUSTED_KEYS="/usr/local/src/debian/canonical-certs.pem"
  • Remplacez par :
CONFIG_SYSTEM_TRUSTED_KEYS=""
Résoudre l'erreur make debian/canonical-certs.pem sur compilation du noyau
  • Répétez l’opération pour la ligne suivante :
CONFIG_SYSTEM_REVOCATION_KEYS=
Résoudre l'erreur make debian/canonical-certs.pem sur compilation du noyau
  • Enregistrez les modifications du fichier puis relancez la compilation :
make clean
  • L’erreur make Aucune règle pour fabriquer la cible « debian/canonical-certs.pem doit être résolue

Méthode 3 – autosigner le noyau Linux

Dans cette dernière méthode, on créer un certificat autosigné, que l’on va utiliser ensuite pour signer les fichiers du noyau Linux.

  • Positionnez vous dans le dossier des sources Linux, puis générez les fichiers de certificats avec openssl :
sudo openssl req -x509 -newkey rsa:4096 -keyout certs/mycert.pem -out certs/mycert.pem -nodes -days 3650
  • Editez le fichier de configuration :
sudo vim .config
  • Enfin modifiez les chemins des clés de certificats :
CONFIG_MODULE_SIG_KEY="certs/mycert.pem"
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS="certs/mycert.pem"
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""