Подписание файла Windows EXE - PullRequest
       102

Подписание файла Windows EXE

144 голосов
/ 31 октября 2008

У меня есть файл EXE , который я хочу подписать, чтобы Windows не предупредила конечного пользователя о приложении от «неизвестного издателя». Я не разработчик Windows. Рассматриваемое приложение является заставкой, созданной из приложения, которое генерирует приложения-заставки. Таким образом, я не имею никакого влияния на то, как создается файл.

Я уже узнал, что мне понадобится сертификат для подписи кода от CA , как Verisign или instantssl.com. Что я не понимаю, так это то, что мне нужно сделать (если это вообще возможно), чтобы подписать мой EXE-файл. Какое простое объяснение?

Ответ Мел Грин взял меня дальше, но signtool просит меня указать, какой сертификат использовать в любом случае. Могу ли я получить бесплатный сертификат для подписи кода, чтобы проверить, будет ли это работать для меня вообще?

Также укажите, какой тип сертификата является правильным. Большинство сайтов упоминают только «подписывание кода» и говорят о подписи приложений, которые фактически скомпилированы пользователем. Это не так для меня.

Ответы [ 8 ]

99 голосов
/ 31 октября 2008

Вы можете попробовать использовать Microsoft Sign Tool

Вы загружаете его как часть Windows SDK для Windows Server 2008 и .NET 3.5. После загрузки вы можете использовать его из командной строки следующим образом:

signtool sign / a MyFile.exe

Это подписывает один исполняемый файл, используя «лучший сертификат» из доступных. (Если у вас нет сертификата, он покажет сообщение об ошибке SignTool.)

Или вы можете попробовать:

signtool signwizard

Это запустит мастера, который поможет вам подписать ваше заявление. (Эта опция недоступна после Windows SDK 7.0.)


Если вы хотите получить сертификат, который вы можете использовать для проверки процесса подписания исполняемого файла, вы можете использовать инструмент .NET Makecert .

Средство создания сертификатов (Makecert.exe)

После того как вы создали собственный сертификат и использовали его для подписи своего исполняемого файла, вам нужно будет вручную добавить его в качестве доверенного корневого центра сертификации для вашего компьютера, чтобы UAC сообщал пользователю запустить его, что это из надежного источника. Важно . Установка сертификата в качестве ROOT CA поставит под угрозу конфиденциальность ваших пользователей. Посмотрите, что случилось с DELL. Вы можете найти больше информации для выполнения этого как в коде, так и в Windows:

Надеюсь, это предоставит дополнительную информацию любому, кто пытается это сделать!

25 голосов
/ 19 сентября 2014

Вы можете получить бесплатный дешевый сертификат подписи кода от Certum , если вы занимаетесь разработкой с открытым исходным кодом.

Я использую их сертификат более года, и он избавляется от сообщения неизвестного издателя из Windows.

Что касается подписи кода, я использую signtool.exe из сценария, подобного этому:

signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe
17 голосов
/ 27 ноября 2008

Журнал ASP ASPects имеет подробное описание того, как подписывать код (Вы должны быть участником, чтобы прочитать статью). Вы можете скачать его через http://www.asp -shareware.org /

Вот ссылка на описание, как вы можете сделать свой собственный сертификат испытаний .

Это также может быть интересно.

14 голосов
/ 06 апреля 2018

У меня был такой же сценарий в моей работе, и вот наши выводы

Первое, что вам нужно сделать, это получить сертификат и установить его на свой компьютер. Вы можете либо купить его в Центре сертификации , либо создать его с помощью makecert .

Вот плюсы и минусы 2 вариантов

Купить сертификат

  • Плюсы
    • Использование сертификата, выданного центром сертификации (ЦС), приведет к убедитесь, что Windows не предупредит конечного пользователя о приложении от «неизвестного издателя» на любом компьютере с использованием сертификата из ЦС (ОС обычно поставляется с корневыми сертификатами от Мэнни CA)
  • Минусы:
    • При получении сертификата в ЦС взимается определенная плата

Создание сертификата с использованием Makecert

  • Плюсы:
    • Шаги просты, и вы можете поделиться сертификатом с конечными пользователями
  • Минусы:
    • Конечные пользователи должны будут вручную установить сертификат на своих компьютерах и, в зависимости от ваших клиентов, это может быть недоступно
    • Сертификаты, сгенерированные с помощью makecert, обычно используются для разработки и тестирования, а не для производства

Подпись исполняемого файла

Существует два способа подписать нужный файл:

  • Использование сертификата, установленного на компьютере

    signtool.exe sign / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v "C: \ filename.dll"

    • В этом примере мы используем сертификат, хранящийся в личной папке с отпечатком SHA1 (этот отпечаток взят из сертификата), чтобы подписать файл, расположенный в «C: \ filename.dll»
  • Использование файла сертификата

    signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f "c: \ path \ to \ mycert.pfx" / p pfxpassword "c: \ path \ to \ file.exe «

    • В этом примере мы используем сертификат «c: \ path \ to \ mycert.pfx» с паролем pfxpassword для подписи файла «c: \ path \ to \ file.exe»

Проверьте свою подпись

Способ 1: использование signtool

Перейти к: Пуск> Выполнить Введите CMD> нажмите ОК В командной строке введите каталог, в котором существует signtool Запустите следующее:

signtool.exe проверяет / pa / v "C: \ filename.dll"

Способ 2. Использование Windows

Щелкните правой кнопкой мыши подписанный файл Выберите Свойства Выберите вкладку Цифровые подписи. Подпись будет отображаться в разделе списка подписей.

Я надеюсь, что это может помочь вам

Источники:

9 голосов
/ 21 февраля 2015

Другой вариант, если вам нужно подписать исполняемый файл на Linux-боксе, это использовать signcode из Mono project tools . Это поддерживается в Ubuntu .

4 голосов
/ 08 февраля 2018

Ссылка https://steward -fu.github.io / веб-сайт / драйвер / wdm / self_sign.htm Примечание: signtool.exe из Microsoft SDK

1.Первый раз (чтобы сделать частный сертификат)

Makecert -r -pe -ss YourName YourName.cer

certmgr.exe -add YourName.cer -s -r localMachine root

2.После (чтобы добавить свой знак в ваше приложение)

signtool sign / s YourName YourApp.exe

3 голосов
/ 16 июня 2017

И еще один вариант: если вы разрабатываете для Windows 10, но у вас не установлен Microsoft signtool.exe, вы можете использовать Bash в Ubuntu для Windows, чтобы подписать ваше приложение. Вот беги вниз:

https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/

2 голосов
/ 28 марта 2018

Используйте следующую ссылку, чтобы подписать файл .exe (setup / installer) (подписать exe / файл установки без использования Microsoft setup signtool)

https://ebourg.github.io/jsign/#files

пример команды java -jar jsign-2.0.jar --keystore keystore.jks "- alias псевдоним --storepass пароль MyInstaller.exe

работал для меня:)

...