[Setup]: SignTool

Допустимые значения:

Имя или перечень параметров, разделённых пробелами

Описание

Определяет имя и параметры инструмента цифровой подписи, который используется для подписи:

Когда инсталлятор содержит действительную цифровую подпись, тогда при его запуске пользователь не получит предупреждение о неизвестном издателе.

Замечание: при запуске инсталлятора могут использоваться временные копии самой программы установки. Если вы самостоятельно подписываете программу установки цифровой подписью уже после компиляции, а не используете инструмент цифровой подписи, то эти копии по умолчанию не подписываются. В результате программы безопасности могут заблокировать запуск этих копий, что приведёт к сбою запуска вашего инсталлятора. Одним из примеров такой блокировки является механизм Microsoft Defender "Снижение площади атаки" (ASR) с правилом "Блокировать запуск исполняемых файлов, если они не соответствуют критериям распространенности, возраста или списка доверенных файлов [внешняя ссылка]. Если вы не можете использовать SignTool, по крайней мере установите для параметра SignedUninstaller значение yes.

Имя и параметры инструмента цифровой подписи должны быть указаны в IDE компилятора (меню Инструменты | Настройка цифровой подписи...) или в командной строке компилятора (при помощи ключа --signtool или -s), иначе произойдёт ошибка.

В параметра и командах инструмента цифровой подписи можно использовать следующие специальные указатели:

    $f (обязательный) — заменяется заключённым в кавычки файлом, который должен быть подписан.

    $p — заменяется параметрами инструмента цифровой подписи.

    $q — заменяется кавычкой; может использоваться для экранирования ключей командной строки, содержащих кавычки.

    $$ — заменяется на один символ $.

Предположим, в среде разработки (IDE) или в командной строке компилятора определены следующие инструменты цифровой подписи:

тогда в сценарии может быть использован один из следующих вариантов:

Пример:
[Setup]
SignTool=mystandard

[Setup]
SignTool=mycustom sign /a /n $qMy Common Name$q /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f

[Setup]
SignTool=byparam signtool.exe sign /a /n $qMy Common Name$q /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f

В секции [Setup] может быть указано несколько директив SignTool, которые буду выполнены в порядке их следования. Это можно использовать для двойной подписи (SHA1 & SHA256) инсталлятора и деинсталлятора:

[Setup]
SignTool=mycustom sign /a /n $qMy Common Name$q /fd sha1 /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f
; параметр /as в следующей строке SignTool необходим для последней версии signtool.exe и сертификата SHA256 (SHA-2)
SignTool=mycustom sign /a /n $qMy Common Name$q /as /fd sha256 /td sha256 /tr http://timestamp.comodoca.com/rfc3161 /d $qMy Program$q $f   

Примечание: из соображений безопасности для любых параметров, передаваемых посредством $p, следует давать уникальное имя, а не копировать byparam из этого или других примеров. Подумайте, что произойдёт, если подключить к сценарию файл стороннего производителя, в котором сказано:

[Setup]
SignTool=byparam format c:

Дальнейшая информация о создании цифровых сертификатов и использовании инструментов цифровой подписи выходит за рамки данной документации.

Примечание: если используется инструмент цифровой подписи и программа установки содержит большой объём данных, рекомендуется задействовать разделение на диски и указать для директивы DiskSliceSize значение max. Если этого не сделать, при запуске программы установки может возникнуть длительная задержка, вызванная проверкой цифровой подписи. На практике не должно быть снижения безопасности от разделения данных установки на диски: все файлы, извлечённые из неподписанных файлов .bin, проходят проверку хеша SHA-256 (при условии, что в сценарии не используется флаг dontverifychecksum). Хеши SHA-256 этих файлов (вместе со всеми другими метаданными) хранятся внутри исполняемого файла установки, который защищён цифровой подписью.

В качестве альтернативы воспользуйтесь флагом download в секции [Files] для загрузки больших файлов в процессе инсталляции вместо включения их в состав программы установки. Загруженные файлы не проходят эту проверку. Чтобы проверить загруженные файлы, используйте флаг issigverify или параметр Hash.

См. также:

SignToolMinimumTimeBetween
SignToolRetryCount
SignToolRunMinimized