Você não disse o que você quer para a chave, mas no Ubuntu eu faço isso periodicamente para assinar drivers manualmente. Meu driver BroadCom WiFi é de terceiros e não assinado, e eu uso o seguinte script toda vez que um novo kernel é instalado: -
#!/bin/bash
if [ "$(whoami)" != "root" ]
then echo "wlsign: must be called from 'root'"
elif [ -z "$1" -o "$1" == "-c" ]
then
[ "$1" == "-c" ] && \
openssl req -new -x509 -newkey rsa:2048 -keyout wl.priv -outform DER -out wl.der -nodes -days 36500 -subj "/CN=BroadCom/"
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./wl.priv ./wl.der $(modinfo -n wl)
[ "$1" == "-c" ] && mokutil --import wl.der
[ "$1" == "-c" ] && echo Now reboot and select MOK install || modprobe wl
else
[ "$1" != "-h" ] && echo "wlsign: invalid options - $@"
echo 'wlsign [-c|-h] : signs proprietary Wireless kernel drivers'
echo ' -c : create new keys (default: use existing)'
echo ' -h : give this help information'
fi
Eu precisava da opção -c
apenas uma vez para criar os arquivos de chave inicialmente. Depois de usar -c
, o sistema precisa ser reinicializado e a nova chave aceita o firmware UEFI.
Eu tenho scripts semelhantes para outros drivers não assinados, especialmente os drivers VMware, que são compilados em tempo real, portanto, nunca podem ser assinados.
Como o Kali e o Ubuntu são ambos derivados do Debian, espero que as estruturas de diretórios do sistema sejam semelhantes. Note que o programa sign-file
está instalado nos cabeçalhos do kernel, então linux-headers-*
precisará ser instalado para o seu kernel. Existe um programa kmodsign
em /usr/bin/
, que pode ser uma alternativa, mas eu não tentei.
Não consigo lembrar onde encontrei essa informação, por isso não posso reconhecer sua origem.