Каков самый простой современный способ подписать пакетный исполняемый файл? [Дубликат]

Простой CSS-трюк, просто добавьте:

width: 100%;
text-align: center;

Это работает как с изображениями, так и с текстом.

181
задан Roger Lipscombe 9 January 2014 в 19:29
поделиться

4 ответа

Обновленный ответ

Если вы используете следующие версии Windows или более поздние версии: Windows Server 2012, Windows Server 2012 R2 или Windows 8.1, тогда MakeCert теперь устарел и Microsoft рекомендует использовать Командлет PowerShell New-SelfSignedCertificate .

Если вы используете более старую версию, такую ​​как Windows 7, вам нужно придерживаться MakeCert или другого решения. Некоторые люди предлагают модуль открытой инфраструктуры Infrastructure Powershell (PSPKI) .

Оригинальный ответ

. Хотя вы можете создать self- подписанный сертификат подписи кода (SPC - Software Publisher Certificate ), я предпочитаю делать следующее:

Создание самозаверяющего центра сертификации (CA)

makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ = разрешить командную строку командной строки)

Это создает самоподписанный (-r) сертификат с закрытым закрытым ключом (-pe). Он называется «Мой CA» и должен быть помещен в хранилище CA для текущего пользователя. Мы используем алгоритм SHA-256 .

Закрытый ключ должен храниться в файле MyCA.pvk, а сертификат в файле MyCA.cer.

Импорт CA certificate

Поскольку вам не нужно иметь сертификат CA, если вы ему не доверяете, вам нужно импортировать его в хранилище сертификатов Windows. Вы можете использовать оснастку MMC сертификатов, но из командной строки:

certutil -user -addstore Root MyCA.cer

Создание сертификата подписи кода (SPC)

makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer

Это почти то же самое, что и выше, но мы предоставляем ключ и сертификат эмитента (переключатели -ic и -iv).

Мы также хотим преобразовать сертификат и ключ в PFX file:

pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx

Если вы хотите защитить файл PFX, добавьте ключ -po, иначе PVK2PFX создаст файл PFX без кодовой фразы.

Использование сертификата для подписи кода

signtool sign /v /f MySPC.pfx ^
              /t http://timestamp.url MyExecutable.exe

( См., почему могут иметь значение временные метки )

Если вы импортируете файл PFX в хранилище сертификатов (вы можете использовать PVKIMPRT или snapin MMC ), вы можете подписать код следующим образом:

signtool sign /v /n "Me" /s SPC ^
              /t http://timestamp.url MyExecutable.exe

Некоторые возможные временные URL-адреса для signtool /t:

  • http://timestamp.verisign.com/scripts/timstamp.dll
  • http://timestamp.globalsign.com/scripts/timstamp.dll
  • http://timestamp.comodoca.com/authenticode

Полная документация Microsoft

Загрузить s

Для тех, кто не является разработчиками .NET, вам понадобится копия Windows SDK и .NET framework. Текущая ссылка доступна здесь: SDK & amp; .NET (который устанавливает makecert в C:\Program Files\Microsoft SDKs\Windows\v7.1). Ваш пробег может отличаться.

MakeCert доступен из командной строки Visual Studio. Visual Studio 2015 имеет его, и его можно запустить из меню «Пуск» в Windows 7 в разделе «Командная строка разработчика для VS 2015» или «VS2015 x64 Native Tools Command Prompt» (возможно, все они в одной папке).

319
ответ дан DBolton 22 August 2018 в 07:49
поделиться
  • 1
    +1 для примеров и для использования timestamping. – Bratch 30 May 2009 в 21:23
  • 2
    Есть ли способ заполнить поле адреса электронной почты сертификата, используя этот метод? Щелкните правой кнопкой мыши exe & gt; свойства & gt; цифровые подписи, показывая электронную почту как "недоступный & quot; после подписания. – cronoklee 17 May 2012 в 11:52
  • 3
    @cronoklee Чтобы заполнить поле электронной почты сертификата, просто добавьте E=your@email. Например: makecert -pe -n "CN=My SPC,E=email@domain" ........ – Rob W 2 February 2013 в 13:41
  • 4
    Вам не нужен флаг расширенного использования -eku 1.3.6.1.5.5.7.3.3, поэтому сертификат может использоваться для подписи кода (я знаю, что powershell не может подписывать скрипты, если он отсутствует) – Scott Chamberlain 21 February 2013 в 01:02
  • 5
    @AdamPhelps, Windows не будет «учиться»; доверять вашему сертификату. Вашим пользователям необходимо установить сертификат CA в корневом хранилище. Это, вообще говоря, плохая идея (поскольку корневые сертификаты ЦС могут использоваться в гнусных целях). Тем не менее, может иметь смысл в корпоративном сценарии. – Roger Lipscombe 10 March 2014 в 10:11

Как указано в ответе, чтобы использовать не устаревший способ подписать собственный скрипт, следует использовать New-SelfSignedCertificate .

  1. Сгенерировать ключ : New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My
  2. Экспортировать сертификат без закрытого ключа: Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert) -FilePath code_signing.crt
  3. Импортировать его как доверенного издателя Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
  4. Импортировать его в качестве корневого сертификата власть. Import-Certifiate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
  5. Подпишите сценарий. Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

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

3
ответ дан chaami 22 August 2018 в 07:49
поделиться
  • 1
    Спасибо за это. Сначала я должен был начать с нижних ответов! – mdiehl13 4 August 2018 в 15:31
  • 2
    Спасибо. Это решило все мои проблемы, пытаясь заставить этот «казалось бы простой» процесс работать. – Dave 16 August 2018 в 09:48

Это довольно легко с помощью команды New-SelfSignedCertificate в Powershell. Откройте powershell и запустите эти 3 команды.

1) Создать сертификат: $ cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert: \ CurrentUser \ My

2) установить для него пароль: $ CertPassword = ConvertTo-SecureString -String «my_passowrd» -Force -AsPlainText

3) Экспортировать его: Export-PfxCertificate -Cert "cert: \ CurrentUser \ My \ $ ($ cert.Thumbprint) "-FilePath" d: \ testcert.pfx "-Password $ CertPassword

Ваш сертификат testcert.pfx будет размещен @ D:/

8
ответ дан JerryGoyal 22 August 2018 в 07:49
поделиться
  • 1
    JerryGoyal вы знаете, как конвертировать самоподписанный сертификат в доверенный сертификат CA Root? – Mr Heelis 29 November 2017 в 10:59

Начиная с PowerShell 4.0 (Windows 8.1 / Server 2012 R2), можно сделать сертификат в Windows без makecert.exe .

Необходимые команды: New-SelfSignedCertificate и Export-PfxCertificate .

Инструкции приведены в Создание самоподписанных сертификатов с помощью PowerShell .

11
ответ дан Peter Mortensen 22 August 2018 в 07:49
поделиться
  • 1
    Если вы хотите использовать это для подписания драйверов, вам необходимо импортировать сертификат CA в хранилище. Мой пример импортирует его в хранилище пользователей, что отлично подходит для большинства программ, для тестирования / внутренних целей. – Roger Lipscombe 5 October 2013 в 09:25
  • 2
    Стоит отметить, что даже если вы установите обновление WMF, чтобы получить PowerShell 4.0 в Windows 7, у вас не будет доступа к этой команде. Кажется, это Win8 или Server 2012 или более поздняя версия. – Daniel Yankowsky 19 April 2016 в 21:48
Другие вопросы по тегам:

Похожие вопросы: