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

StackOverflow https://stackoverflow.com/questions/84847

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Если вы используете следующие версии Windows или более поздние:Windows Server 2012, Windows Server 2012 R2 или Windows 8.1, затем MakeCert теперь устарел, и Корпорация Майкрософт рекомендует использовать командлет PowerShell Новый-самоподписанный сертификат.

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

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

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

Создание самозаверяющего центра сертификации (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).Он называется "Мой центр сертификации" и должен быть помещен в хранилище центров сертификации для текущего пользователя.Мы используем SHA-256 алгоритм.Ключ предназначен для подписи (-sky).

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

Импорт сертификата центра сертификации

Поскольку нет смысла иметь сертификат центра сертификации, если вы ему не доверяете, вам нужно будет импортировать его в хранилище сертификатов Windows.Ты может используйте сертификаты 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:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.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

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

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

  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)

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

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

Команды, которые вам нужны, следующие Новый-самоподписанный сертификат и Экспорт-PfxCertificate.

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

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

1) Создать сертификат:
$cert = Новый-самоподписанный сертификат -dNSName www.yourwebsite.com -Введите кодовое обозначение -Сертификат хранилища:\CurrentUser\My

2) установите для него пароль:
$CertPassword = Преобразовать в-SecureString -Строка "my_passowrd" -Принудительно –AsPlainText

3) Экспортируйте его:
Экспорт-PfxCertificate -Сертификат "сертификат:\CurrentUser\My\$($cert.Отпечаток большого пальца)" -Путь к файлу "d:\selfsigncert.pfx " -Пароль $CertPassword

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top