我在加载/安装内核模块时遇到问题。内核模块成功构建,但每当我尝试 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 menuconfig
或make xconfig
答案2
创建 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
跑步:
openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem
将关键文件移动到所需文件夹,例如:
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
可能会解决这个问题。