나는 재미(롤링 안정)를 위해 Linux 커널 소스를 구축하고 테스트했으며 요즘에는 내가 만든 키로 커널 모듈에 서명하고 싶었고 서명에 사용할 OpenSSL의 PKCS#11 엔진을 얻었습니다.
하지만 OpenSSL이 키/인증서를 요청할 수 없다는 문제가 있습니다. 그래서 확인을 사용했지만 pkcs11-tool
결과는 "슬롯 없음"입니다.
이는 슬롯에 스마트 카드가 포함되어야 한다는 의미입니까? 그렇지 않으면 커널 모듈에 서명하는 방법은 무엇입니까?
다음은 openssl.cnf
다이제스트 내용 이다.
# 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]
하루 동안 구글링을 해봤지만 기업, 클라우드에 대한 정보만 찾았습니다... 소용이 없었습니다.
답변1
Linux 커널 소스 패키지의 하위 디렉터리 에는 도구(이전에는 스크립트, 이제는 커널과 함께 빌드된 바이너리 도구) scripts
가 있습니다 .sign-file
예:linux-6.6.13/scripts/sign-file
이를 사용하여 커널 모듈에 서명할 수 있습니다.
/path/to/linux-6.6.13/scripts/sign-file sha256 private-key.pem certificate.der kernelmodule.ko
또는 PEM 형식의 단일 파일에 개인 키와 인증서가 모두 있는 경우 CONFIG_MODULE_SIG_KEY
구성 메뉴에서 커널 구성 옵션을 설정할 수 있습니다.암호화 API -> 서명 확인에 사용되는 인증서 -> 모듈 서명 키의 파일 이름 또는 PKCS#11 URI)는 파일을 가리키고 CONFIG_MODULE_SIG_ALL=y
(구성 메뉴에서) 설정합니다.로드 가능한 모듈 지원 활성화 -> 모든 모듈에 자동으로 서명), 커널 빌드 프로세스는 선택한 키를 사용하여 해당 커널 빌드의 모든 모듈에 자동으로 서명합니다.
다음 명령을 사용하여 적절한 키와 인증서 파일을 생성할 수 있습니다.
openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \
-config x509.genkey -outform PEM -out kernel_key.pem \
-keyout kernel_key.pem
이 도구도 사용하려면 sign-file
다음 명령을 사용하여 인증서 부분을 DER 형식으로 변환할 수 있습니다.
openssl x509 -in kernel_key.pem -out certificate.der -outform DER
바라보다커널 소스 패키지의 Documentation/admin-guide/module-signing.rst자세한 내용은.
커널 모듈 서명에는 PKCS#11(및 확장 스마트 카드 또는 기타 하드웨어 보안 모듈)을 사용할 필요가 없습니다.
하지만 자신만의 Linux 배포판을 만들어 전 세계에 대량으로 배포하기 시작한다면 보안 강화를 위해 배포 서명 키를 저장하는 PKCS#11 보안 모듈을 사용하는 것이 좋은 선택이 될 것입니다.아주 좋은 생각이에요.