没有 OpenSSL 签名文件 signature_key.pem 导致加载内核模块时出错

没有 OpenSSL 签名文件 signature_key.pem 导致加载内核模块时出错

我在加载/安装内核模块时遇到问题。内核模块成功构建,但每当我尝试 make module_install 时,内核似乎都无法加载。它留下以下错误消息:-

At main.c:158:
    - SSL error:02001002:system library:fopen:No such file or directory: bss_file.c:175
    - SSL error:2006D080:BIO routines:BIO_new_file:no such file: bss_file.c:178 sign-file: certs/signing_key.pem: No such file or directory
    DEPMOD 4.10.0-20-generic

我读过关于这个问题的文章,并意识到内核现在只加载正确签名的模块。我发现/usr/src/<linux version>/certs系统中的内核源目录没有signing_key.pem私钥文件,因此我看到了这个错误。

我该怎么办?我可以手动生成signing_key.pem文件并进一步使用它吗?有什么好的方法可以做到这一点?使用生成私钥/证书文件会openssl.cnf在这方面帮助我吗?或者我应该完全避免使用签名模块并尝试按原样加载模块而不进行任何验证?

我在用Ubuntu 17.04 内核为 4.10.0-20-generic

答案1

在您正在编译的 Linux 内核根文件夹中,转到 certs 文件夹并运行:

openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem

其中 x509.genkey 是一个包含以下内容的文件:

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
CN = Modules

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid

参考:https://wiki.gentoo.org/wiki/Signed_kernel_module_support

选项 2,在配置中禁用模块的自动签名make menuconfigmake xconfig

答案2

基于cryptoboy 的回答

  1. 创建 x509.genkey 文件

    echo -e "[ req ] \n\
    default_bits = 4096 \n\
    distinguished_name = req_distinguished_name \n\
    prompt = no \n\
    x509_extensions = myexts \n\
    
    [ req_distinguished_name ] \n\
    CN = Modules \n\
    \n\
    [ myexts ] \n\
    basicConstraints=critical,CA:FALSE \n\
    keyUsage=digitalSignature \n\
    subjectKeyIdentifier=hash \n\
    authorityKeyIdentifier=keyid" > x509.genkey
    
  2. 跑步:

    openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem
    
  3. 将关键文件移动到所需文件夹,例如:

    mv signing_key.pem signing_key.x509 `find /usr/src/*-generic/certs`
    

答案3

在 Manjaro Linux 上,这个命令对我有用,2023:

https://github.com/webcamoid/akvcam/issues/15#issuecomment-612657792

有些人报告说运行sudo depmod -a可能会解决这个问题。

相关内容