Как создать самозаверяющий сертификат для подписи кода в Windows?

Как создать самозаверяющий сертификат для подписи кода с помощью инструментов из Windows SDK?

5 ответов


Обновил Ответ

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

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

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

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

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

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

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

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

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

импорт сертификата CA

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

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:

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 или MMC snapin), вы можете подписать код следующим образом:

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

скачать

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

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


ответ Роджера был очень полезен.

у меня были небольшие проблемы с его использованием, хотя, и продолжал получать красный" Windows не может проверить издателя этого программного обеспечения драйвера " диалоговое окно ошибки. Ключ должен был установить корневой сертификат теста с

certutil -addstore Root Demo_CA.cer

который ответ Роджера не совсем покрывал.

вот пакетный файл, который работал для меня (с моими .inf-файл, не входит в комплект). Он показывает, как сделать все это от начала до конца, без каких-либо инструментов GUI вообще (кроме для нескольких подсказок пароля).

REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.

PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK00.16385.1\bin\selfsign;c:\WinDDK00.16385.1\Tools\devcon\amd64

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

makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
   -sky signature ^
   -ic Demo_CA.cer -iv Demo_CA.pvk ^
   -sv Demo_SPC.pvk Demo_SPC.cer

pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
   -pfx Demo_SPC.pfx ^
   -po x

inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v

signtool sign /d "description" /du "www.yoyodyne.com" ^
   /f Demo_SPC.pfx ^
   /p x ^
   /v driver\demoprinter.cat

certutil -addstore Root Demo_CA.cer

rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

certutil -delstore Root Demo_CA

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

вам нужны команды New-SelfSignedCertificate и Экспорт-PfxCertificate.

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


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

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

2) Установить пароль:
$CertPassword = ConvertTo-SecureString - Строка "my_passowrd" - сила –AsPlainText

3) экспорт:
Export-PfxCertificate-Cert " cert:\CurrentUser\My\$($cert.Отпечаток большого пальца)" - FilePath "d:\selfsigncert - ... pfx " - пароль $CertPassword

сертификат selfsigncert.pfx-файл будет располагаться @ D:/


необязательный шаг: вам также потребуется добавить пароль сертификата к системным переменным среды. сделать это, введя ниже в cmd: setx CSC_KEY_PASSWORD "my_password"


как указано в ответе, чтобы использовать не устаревший способ подписать свой собственный скрипт, следует использовать 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)[0] -FilePath code_signing.crt [0] сделает эту работу для случаев, когда у вас есть более одного сертификата... Очевидно, что индекс соответствует сертификату, который вы хотите использовать... или использовать способ фильтрации (по thumprint или эмитент).

  3. импортируйте его как доверенный издатель
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. импортируйте его как корневой центр сертификации.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. подписать скрипт.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

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