Eu construo e testo uma fonte de kernel Linux (rolling-stable) para me divertir, hoje em dia, gostaria de assinar um módulo de kernel com uma chave criada por mim mesmo, então peguei o mecanismo PKCS # 11 no OpenSSL que é usado para assiná-lo.
No entanto, há um problema de que o OpenSSL não solicita uma chave/certificação. Então confirmo com pkcs11-tool
, mas o resultado é "Sem slots".
Isso significa que devo ter um slot envolvido no cartão inteligente? Senão, como assino módulos do kernel?
A seguir é openssl.cnf
digerido
# referenced from the [provider_sect] below.
# Refer to the OpenSSL security policy for more information.
# .include fipsmodule.cnf
[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
init = 0
# List of providers to load
[provider_sect]
E tentei pesquisar no Google por um dia, mas encontrei apenas sobre empresa, nuvem....; nao é útil.
No
scripts
subdiretório do pacote fonte do kernel Linux, existe umasign-file
ferramenta (costumava ser um script, agora uma ferramenta binária, construída junto com o kernel).Exemplo:
linux-6.6.13/scripts/sign-file
Você pode usá-lo para assinar módulos do kernel:
Ou se você tiver a chave privada e o certificado em um único arquivo no formato PEM, você pode definir a opção de configuração do kernel
CONFIG_MODULE_SIG_KEY
(no menu de configuração API criptográfica -> Certificados para verificação de assinatura -> Nome do arquivo ou URI PKCS#11 da assinatura do módulo key ) para apontar para o arquivo e definirCONFIG_MODULE_SIG_ALL=y
(no menu de configuração Enable loadable module support -> Automatically sign all module ), então o processo de construção do kernel assinará automaticamente todos os módulos dentro daquela compilação do kernel com a chave de sua escolha.Você pode criar um arquivo de chave e certificado adequado com, por exemplo:
Se quiser usar a
sign-file
ferramenta também, você pode converter a parte do certificado para o formato DER com:Consulte Documentation/admin-guide/module-signing.rst no pacote fonte do kernel para obter mais detalhes.
O uso do PKCS#11 (e, por extensão, de cartões inteligentes ou outros módulos de segurança de hardware) não é necessário para a assinatura do módulo do kernel.
No entanto, se você criar sua própria distribuição Linux e começar a publicá-la em todo o mundo em números significativos, seria uma boa ideia usar um módulo de segurança PKCS#11 para armazenar suas chaves de assinatura de lançamento para maior segurança .