У нас есть несколько систем сборки, использующих Qt. Поскольку мы хотели сэкономить время на подписании задач, а мы должны подписывать все неподписанные двоичные файлы, которые мы распространяем, мы пошли дальше и подписали все двоичные файлы Qt в месте их установки, а также для некоторых наших менеджеров пакетов, использующих зависимости Qt, то же самое. тип установки, за исключением того, что пакеты подписываются вместо локального каталога Qt на ведомых устройствах сборки.
Сегодня я заметил как в Jenkins, так и в потоках сборки TFS, где при использовании проектов Qt в журналах появляется этот маленький двухстрочный код:
15:24:19 Обновление Qt5Core.dll.
15:24:19 Исправление Qt5Core.dll...
Затем позже в журналах сборки для Jenkins его цифровая подпись была безуспешно проверена, а затем подписана с помощью тестового сертификата:
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:19IF 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 Файл: C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 Отметка времени алгоритма индексирования
15:24:19 ============================== =========
15:24:19
15:24:19 Количество ошибок: 1
15:24:19 Ошибка SignTool: Подпись не найдена.
15:24:19 Самоподписание C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 Добавление дополнительного хранилища выполнено 15:24:19 Успешно подписано: C:\ Папка сборки\артефакты\qt5611_win32-msvc2015\релиз\Qt5Core.dll
Что-то из QMake
или JOM
делает цифровую подпись этого 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:19windeployqt -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-разрядная версия, исполняемый файл
15:24:19 Direct зависимости: Qt5Core
15:24:19 Все зависимости: Qt5Core
15:24:19 Будет развернуто: Qt5Core