Проблемы с подписью кода

Укороченная версия

У меня есть проблемы с подписанием моего кода с помощью Windows 7 / Signtool.exe, и мне нужен совет / разъяснение, как решить следующую проблему: когда я пытаюсь подписать файл кода .exe в Windows 7, используя signtool и / как вариант, signtool не будет работать, он жалуется на то, что я пытаюсь использовать какой-то неподдерживаемый вариант. Подписание без / as работает в Windows 7, а подписание с / as работает в Windows 8.1 и Windows 10.

  1. Кто-нибудь, кто подписывает использование / as на WIndows 7, получил signtool для работы?

  2. Зачем кому-то нужно использовать / as, если у него только одна подпись в файле?

Длинная версия

Мне посоветовали подписывать мои .exe файлы, главным образом для того, чтобы убрать предупреждения Windows о неизвестном происхождении программного обеспечения, и я делал это в течение многих лет, не особо задумываясь об этом. Я использовал signtool и предоставленный клиентом файл pfx, и все было в порядке. Программное обеспечение продается клиентам по всему миру и должно работать на Windows XP и более поздних версиях. Неопытных пользователей может утомить предупреждение о том, что программное обеспечение потенциально опасно, поэтому подписывание было реализовано много лет назад.

Недавно истек срок действия файла pfx. Наряду с новым и действующим сертификатом (Verisign / Geotrust) мне были даны инструкции, что новый файл сейчас (поддерживается? Требуется? Принудительно / и используется?) Sha256, и мне нужно использовать следующую командную строку для подписи моего кода:

"signtool.exe" sign /n "..." /d "..." /du "..." /as /fd sha256 /tr "http://timestamp.geotrust.com/tsa" "<.exe file name>"

Я импортировал новый pfx в свое хранилище сертификатов, удалил старый (срок действия которого все равно истек) и попробовал, но на моей машине разработки (Windows 7 x64) это дало мне сообщение об ошибке от signtool:

Ошибка SignTool: отсутствует необходимая функция.
Вероятно, эта ошибка означает, что вы используете SignTool в ОС, которая
не поддерживает указанные вами параметры.

Я попробовал это на машине с Windows 8.1, и команда сработала. Мой клиент попробовал на своей машине с Windows 10, и это тоже сработало.

Методом проб и ошибок я обнаружил, что проблема связана с параметром / as, если я его опущу, я также могу подписаться на WIndows 7. Кажется, сообщение идет в правильном направлении, но когда я прочитал документы в Microsoft (https://msdn.microsoft.com/de-de/library/8s9b9yaz%28v=vs.110%29.aspx#sign) нет никаких утверждений везде, где параметр / as зависит от версии ОС. Поэтому я подозреваю, что, вероятно, есть что-то еще, что требует обновления, но поскольку я установил последнюю версию .NET Framework (4.5.1), и никакая другая зависимость не указана, что еще я могу обновить? Мне тоже не нравится переносить платформу разработки на Windows 8 или Windows 10.

Я подумал о том, чтобы просто опустить параметр / as. Кажется, это связано с несколькими подписями, добавленными к одному файлу. Если я буду следовать требованиям моего клиента, он все равно хочет только одну подпись (вариант sha256, использующий новый сертификат) на коде.

Когда я поднял этот вопрос, мой клиент ответил, что он получил образец строки кода signtool от какого-то техника, у которого он купил сертификат. На своей тестовой машине (Windows 10) он обнаружил, что она работает. Ему было все равно, если я пропущу эту опцию, если я гарантирую, что это не приведет к побочным эффектам. Я их не вижу, поскольку, как я уже объяснил, есть только одна подпись для файлов, поэтому опция, которая добавляет еще одну, на мой взгляд, излишняя.

Однако я не уверен на 100%.


person Nimral    schedule 26.02.2016    source источник


Ответы (1)


SDK для Windows 7 не имеет параметра / as. Вам необходимо перейти на Win 8.1 или выше.

знак signtool /?

Должны показать все варианты.

person Matt Cobb    schedule 30.03.2016
comment
Привет, Мэтт, спасибо за ответ. Я пришел к такому же выводу и переместил свою машину разработки на W10. Я также узнал о двойной подписи, все работает хорошо, хотя с одним исключением: хотя я могу подписывать свой .exe двойной подписью, я не могу подписывать файлы msi, потому что msi поддерживает только одну подпись. Мне действительно любопытно, что произойдет с установщиками msi, когда Microsoft прекратит использование SHA-1 к концу этого года ... Привет, Армин. - person Nimral; 02.04.2016
comment