如何对应用程序二进制文件进行签名,将签名写入文件并将其安装到 yocto build 中的 rootfs?

问题描述 投票:0回答:1

我有一个 bitbake 配方,可以构建一个简单的 C hello world 应用程序,并将生成的应用程序二进制文件安装到 rootfs。

SRC_URI = "file://hello.c"

S = "${WORKDIR}"

do_compile() {
    ${CC} hello.c ${LDFLAGS} -o hello
}

do_install() {
    install -d ${D}/opt/project
    install -m 0755 hello ${D}/opt/project/hello
}

FILES:${PN} += "/opt/project/*"

我还想对安装到 rootfs 的

hello
二进制文件进行签名,并将该签名也添加到 rootfs 中。

我尝试按如下方式扩展食谱:

SRC_URI = "file://hello.c"
DEPENDS += "openssl-native"

S = "${WORKDIR}"

do_compile() {
    ${CC} hello.c ${LDFLAGS} -o hello
}

do_sign_application() {
    openssl dgst -sha256 -sign ${PATH_TO_PRIVATE_KEY}/${PRIVATE_KEY_NAME}.pem -passin file:${PATH_TO_PRIVATE_KEY_PWD_FILE}/${PRIVATE_KEY_PWD_FILE_NAME} -out ${B}/hello.sig ${B}/hello
}

do_install() {
    install -d ${D}/opt/project
    install -m 0755 hello ${D}/opt/project/hello
    install -m 0400 hello.sig ${D}/opt/project/hello.sig
}

addtask sign_application after do_compile before do_install

FILES:${PN} += "/opt/project/*"

这确实对

do_compile
创建的二进制文件进行了签名,并将生成的签名文件安装到 rootfs 中。但是,
do_compile
阶段创建的二进制文件与部署到 rootfs 的二进制文件不同,因此当我检查目标上的签名时,它会失败。似乎在打包阶段发生了一些剥离和其他事情,从而更改了应用程序二进制文件。

如何创建签名并使用正确的应用程序二进制文件(部署到 rootfs 的二进制文件)安装它?

linux embedded-linux yocto digital-signature bitbake
1个回答
0
投票

这是我想出的解决方案。应用程序配方在打包后部署其二进制文件,然后一个单独的配方处理签名的创建和安装。

project-app.bb
的食谱:

SRC_URI = "file://hello.c"

S = "${WORKDIR}"

inherit deploy

do_compile() {
    ${CC} hello.c ${LDFLAGS} -o hello
}

do_install() {
    install -d ${D}/opt/project
    install -m 0755 hello ${D}/opt/project/hello
}

do_deploy() {
    # Deploy the application for project-hello-sig to generate signature.
    install -d ${DEPLOYDIR}
    install -m 0755 ${S}/package/opt/project/hello ${DEPLOYDIR}/hello
}

addtask deploy after do_package

FILES:${PN} += "/opt/project/*"

project-app-sig.bb
的食谱:

DEPENDS = "openssl-native"
do_configure[depends] += "project-hello:do_deploy"

do_sign_application() {
    openssl dgst -sha256 -sign ${PATH_TO_PRIVATE_KEY}/${PRIVATE_KEY_NAME}.pem -passin file:${PATH_TO_PRIVATE_KEY_PWD_FILE}/${PRIVATE_KEY_PWD_FILE_NAME} -out ${B}/hello.sig ${DEPLOY_DIR_IMAGE}/hello
}

do_install() {
    install -d ${D}/opt/project
    install -m 0400 ${B}/hello.sig ${D}/opt/project/hello.sig
}

addtask sign_application after do_configure before do_install

FILES:${PN} += "/opt/project/*"
© www.soinside.com 2019 - 2024. All rights reserved.