2017-02-17 75 views
0

我们有一对使用Qt的构建系统。由于我们希望节省签署任务的时间,并且我们需要签署我们分发的所有未签名的二进制文件,所以我们继续并在其安装位置签署了所有Qt二进制文件,对于使用Qt依赖项的一些软件包管理器,类型的设置,不同之处在于它的包被签名而不是构建从站上的本地Qt目录。后来Qt在构建时是否使其自己的库的数字签名失效?

15:24:19 Updating Qt5Core.dll.
15:24:19 Patching Qt5Core.dll...

然后在詹金斯,其数字签名生成日志:

今天,我发现无论在詹金斯并在使用Qt项目TFS构建流动,这个小两班轮显示在日志中没有被成功验证,然后用测试证书签署:

15:24:19 call "C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" verify /pa C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 IF NOT "!errorlevel!" == "0" echo Self-Signing C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll & call signtool sign /f C:\DevOps\test_certificates\cert.pfx /fd SHA512 C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll && set something_signed=true
15:24:19 )
15:24:19 File: C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 Index Algorithm Timestamp
15:24:19 ========================================
15:24:19
15:24:19 Number of errors: 1

15:24:19 SignTool Error: No signature found.
15:24:19 Self-Signing C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 Done Adding Additional Store 15:24:19 Successfully signed: C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll

是从QMakeJOM什么数字签名从这个Updating/Patching发生的事情无效?如果是这样,这是不可避免的?我并不熟悉在其他操作系统上构建Qt项目,但我记得需要使用一些工具来更改库指向的位置。我能想到的最好的结果就是像WinDeployQt这样的事情发生在幕后。

这是前两行引述权之前运行,如果你有兴趣在什么WinDeployQt被报告:

15:24:18 link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='removed-by-OP' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:C:\BuildFolder\bin\release\qt_test_build.exe @C:\Users\USER~1\AppData\Local\Temp\qt_test_build.exe.4012.485.jom
15:24:19 windeployqt -core --no-compiler-runtime --no-quick-import --no-translations C:\BuildFolder\solution_directory\..\bin\release\qt_test_build.exe
15:24:19 C:\BuildFolder\bin\release\qt_test_build.exe 64 bit, release executable
15:24:19 Direct dependencies: Qt5Core
15:24:19 All dependencies : Qt5Core
15:24:19 To be deployed : Qt5Core

回答

1

qmake不修改任何东西,除了它的输出:其唯一的工作就是产生为另一个构建系统构建脚本。

jom是一个制作工具,并做什么nmake会做,除非在多个进程并行(如果可能的话)。它仅仅遵循makefile中的指示。我不知道qmake中的任何代码都会生成修改Qt库的makefile操作 - 除非您在项目文件中明确指出了会引起此问题的某些内容。我从来没有见过它发生过。

这使得windeployqt,和打补丁的Qt二进制后,他们复制到目标位置,因为二进制文件包含一些嵌入式的路径等,如果您通过生成文件/项目文件调用windeployqt,那么它会显示为如果Qt已从job中修改。

观察到您签署的原始位置的Qt二进制文件仍然如此。事实上,签名后的Qt安装应该是只读的,并且有权限设置,使得构建本身不能搞砸,除非Qt安装步骤是构建本身的一部分。

唉,这里有一个简单的解决方法:在构建安装包之前对其进行签名 - 在windeployqt之后肯定会有。适用于我(tm)。如果你的产品包含一个可执行文件,或者可以这样做,静态构建也可能是一种选择。

+0

Dag nammit!我有一种感觉,那就是发生了什么,或类似> _ <我想可以使它们的输出位置静态签名并提交给Qt DLL。我可能会为这个较小的回购站而逃避,但我有一种感觉,DevOps中的母亲慈悲会打破统治者和稻米跪xD但这是_my_问题,不是你的!谢谢,库巴奥伯! –

相关问题