Как создать самозаверяющий сертификат для подписи кода с помощью инструментов из Windows SDK?
security
code-signing
Роджер Липскомб
источник
источник
Ответы:
Обновленный ответ
Если вы используете следующие версии Windows или более поздние: Windows Server 2012, Windows Server 2012 R2 или Windows 8.1, тогда MakeCert устарел , и Microsoft рекомендует использовать командлет PowerShell New-SelfSignedCertificate .
Если вы используете более старую версию, такую как Windows 7, вам нужно придерживаться MakeCert или другого решения. Некоторые люди предполагают , в инфраструктуре открытого ключа , Powershell (PSPKI) модуль .
Оригинальный ответ
Хотя вы можете создать самоподписанный сертификат для подписи кода (SPC - Software Publisher Certificate ) за один раз, я предпочитаю делать следующее:
Создание самозаверяющего центра сертификации (ЦС)
(^ = разрешить пакетную командную строку для переноса строки)
Это создает самозаверяющий (-r) сертификат с экспортируемым закрытым ключом (-pe). Он называется «Мой ЦС» и должен быть помещен в хранилище ЦС для текущего пользователя. Мы используем алгоритм SHA-256 . Ключ предназначен для подписи (-ски).
Закрытый ключ должен храниться в файле MyCA.pvk, а сертификат - в файле MyCA.cer.
Импорт сертификата CA
Поскольку нет смысла иметь сертификат CA, если вы ему не доверяете, вам необходимо импортировать его в хранилище сертификатов Windows. Вы можете использовать оснастку MMC Certificates, но из командной строки:
Создание сертификата для подписи кода (SPC)
Это почти то же самое, что и выше, но мы предоставляем ключ эмитента и сертификат (ключи -ic и -iv).
Мы также хотим преобразовать сертификат и ключ в файл PFX:
Если вы хотите защитить файл PFX, добавьте ключ -po, иначе PVK2PFX создаст файл PFX без ключевой фразы.
Использование сертификата для подписи кода
( Посмотрите, почему метки времени могут иметь значение )
Если вы импортируете файл PFX в хранилище сертификатов (вы можете использовать PVKIMPRT или оснастку MMC), вы можете подписать код следующим образом:
Некоторые возможные временные метки для 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» (возможно, все они находятся в одной папке).
источник
E=your@email
. Например:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
чтобы сертификат можно было использовать для подписи кода (я знаю, что powershell не сможет подписать сценарии, если он его пропустит)Как указано в ответе, чтобы использовать неосмотрительный способ подписи собственного сценария, следует использовать New-SelfSignedCertificate .
[0] сделает эту работу для случаев, когда у вас более одного сертификата ... Очевидно, что индекс будет соответствовать сертификату, который вы хотите использовать ... или используйте способ фильтрации (по thumprint или эмитенту).
Очевидно, что после того, как вы настроили ключ, вы можете просто подписать любые другие сценарии с ним.
В этой статье вы можете получить более подробную информацию и помощь в устранении неполадок .
источник
(get-ChildItem ...)
возврата более одного сертификата, поэтому я поставил «[0]» в конце, и это сработало. Как вExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
Ответ Роджера был очень полезным.
У меня были небольшие проблемы с его использованием, и я продолжал получать красное диалоговое окно с сообщением об ошибке «Windows не может проверить издателя этого драйвера». Ключ должен был установить тестовый корневой сертификат с
который ответ Роджера не совсем охватывает.
Вот пакетный файл, который работал для меня (с моим .inf файлом, не включенным). Он показывает, как сделать все это от начала до конца, без инструментов GUI вообще (за исключением нескольких запросов пароля).
источник
Это довольно просто с помощью команды New-SelfSignedCertificate в Powershell. Откройте PowerShell и выполните эти 3 команды.
Ваш сертификат selfsigncert.pfx будет расположен @
D:/
Необязательный шаг: вам также потребуется добавить пароль сертификата в системные переменные среды. сделать это, введя ниже в cmd:
setx CSC_KEY_PASSWORD "my_password"
источник
Начиная с PowerShell 4.0 (Windows 8.1 / Server 2012 R2) в Windows можно создать сертификат без makecert.exe .
Вам нужны следующие команды: New-SelfSignedCertificate и Export-PfxCertificate .
Инструкции приведены в разделе Создание самозаверяющих сертификатов с помощью PowerShell .
источник