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


180

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

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

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

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


3
Просто любопытно - сколько нужно заплатить, чтобы купить сертификат?
InTheNameOfScience

2
@Rigel примерно 400 долларов в год, вероятно, не стоит :)
Sharan Arumugam

@SharanArumugam: ЧТО? Это как Microsfot против дешевого / свободного программного обеспечения!
InTheNameOfScience

Ответы:


116

Вы можете попробовать использовать 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:

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


Рабочий процесс в отдельном вопросе: stackoverflow.com/questions/84847/…
The_Ghost

4
«Этот инструмент автоматически устанавливается вместе с Visual Studio. Чтобы запустить инструмент, используйте командную строку разработчика (или командную строку Visual Studio в Windows 7)». msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92

Очень любопытно по поводу сертификата, используемого signtool тоже.
Overdrivr

1
Опция «signwizard» недоступна после Windows SDK 7.0
Омар Рейс

Makecert устарел, и вместо него следует использовать командлет PowerShell New-SelfSignedCertificate для создания сертификата тестирования. Подробности в stackoverflow.com/a/51443366/38117911 (ответ на вопрос, связанный с The_Ghost).
Александр Рево

35

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

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

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

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

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

Создать сертификат с помощью 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> нажмите OK. В командной строке введите каталог, в котором существует signtool. Выполните следующее:

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

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

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

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

Источники:


Рад, что могу помочь @PhilLab
Эрик Кастрильо

Пожалуйста, также дайте оценку $$$. Спасибо!
InTheNameOfScience

1
@WeGoToMars Я думаю, что эта статья может помочь вам cheapsslsecurity.com/sslproducts/codesigningcertificate.html или здесь digicert.com/code-signing
Эрик Кастрильо

31

Вы можете получить бесплатный дешевый сертификат подписи кода от 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

3
Это больше не выглядит бесплатным, все еще намного дешевле, € 14
hultqvist

1
Ты прав, это больше не выглядит свободным. я только что обновил и ничего не заплатил. Может быть, я дедушка. Может быть, их внутренние процессы нарушены. Их сайт, конечно, сложный.
Ли Ричардсон


Магазин Certum говорит, что их сертификат с открытым исходным кодом НЕ удалит сообщение Microsoft SmartScreen Filter.
Маркус Лайр

17

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

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

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


7
Приложение четыре года спустя: Comodo был взломан где-то в начале 2012 года ( blogs.comodo.com/it-security/data-security/… ), и поэтому многие пользовательские агенты теперь отклоняют сертификаты с полномочиями root Comodo
A. Wilson

8
Является ли Comodo по-прежнему рискованной ставкой в ​​середине 2013 года, и под «пользовательскими агентами» это означает, что Microsoft / Windows определенно решают, показывать ли это пресловутое сообщение «неизвестного издателя».
Дан W

Извините, удалены явные сервисные рекомендации, которые 1) устарели и 2) были исключены не по теме (потому что 1).
deceze


8

Ссылка https://steward-fu.github.io/website/driver/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


4

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

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


osslsigncodeтакже доступно в разделе cygwin, так что если вы уже используете это (как я), то вы можете войти в свою текущую среду, а не переключаться на WSL.
thoni56

4

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

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

Пример команды java -jar jsign-2.0.jar - хранилище ключей keystore.jks "- псевдоним псевдонима --storepass пароль MyInstaller.exe

Работал на меня :)


3

Это не прямой ответ на вопрос, но он тесно связан (и, надеюсь, полезен), так как рано или поздно программист сунет руку в кошелек:

Итак, цены на подпись EV:

1 год 350 долларов США + (скрытая плата 50 долларов США)
2 год 600 долларов США
3 год 750 долларов США
[www.ksoftware.net] [3]
eToken отправляется в виде USB-накопителя. Читатель не нужен.
Вы фактически покупаете у Comodo (Sectigo)

1 год 350 евро
3 года 799 евро
sklep.certum.pl

1 год $ 499 USD
3 год $ 897 USD
sectigo.ru

1 год $ 410 всего
2 года $ 760 всего
3 года $ 950 всего
www.globalsign.com

1 год: 600 долларов (это было 104 доллара)
3 год:?
www.digicert.com

1 год: $ 700
3 года: нелепо дорого
[ https://trustcenter.websecurity.symantec.com/]

Больше цен здесь:
https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html


Также смотрите ссылку, добавленную Эриком Кастрильо: cheapsslsecurity.com/sslproducts/codesigningcertificate.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.