Обновленный ответ
Если вы используете следующие версии Windows или более поздние: Windows Server 2012, Windows Server 2012 R2 или Windows 8.1, тогда MakeCert устарел , и Microsoft рекомендует использовать командлет PowerShell New-самозаверенный сертификат .
Если вы используете более старую версию, например Windows 7, вам нужно придерживаться MakeCert или другого решения. Некоторые люди предлагают Модуль PowerShell (PSPKI) инфраструктуры открытого ключа .
Оригинальный ответ
Хотя вы можете создать самозаверяющий сертификат для подписи кода (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). Он называется «Мой ЦС» и должен быть помещен в хранилище ЦС для текущего пользователя. Мы используем алгоритм SHA-256 . Ключ предназначен для подписи (-ски).
Закрытый ключ должен храниться в файле MyCA.pvk, а сертификат - в файле MyCA.cer.
Импорт сертификата CA
Поскольку нет смысла иметь сертификат 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:
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), вы можете подписать код следующим образом:
signtool sign /v /n "Me" /s SPC ^
/t http://timestamp.url MyExecutable.exe
Некоторые возможные временные метки для signtool /t
:
Полная документация 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» (возможно, все они находятся в одной папке).