5 ответов:
Обновил Ответ
если вы используете следующие версии Windows или более поздние: Windows Server 2012, Windows Server 2012 R2 или Windows 8.1, то MakeCert теперь устарел, и Microsoft рекомендует использовать командлет PowerShell New-SelfSignedCertificate.
если вы используете более старую версию, такую как Windows 7, вам нужно будет придерживаться MakeCert или другого решения. Некоторые люди предлагаю в модуль Powershell инфраструктуры открытых ключей (PSPKI).
Оригинальный Ответ
в то время как вы можете создать самозаверяющий сертификат подписи кода (SPC -Сертификат Издателя Программного Обеспечения) на одном дыхании, я предпочитаю сделать следующее:
создание самозаверяющего центра сертификации (ЦС)
makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^ -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer(^ = разрешить пакетной командной строке обернуть строку)
это создает самозаверяющий (- r) сертификат, с помощью которого экспортируемый закрытый ключ (ПЭ). Он называется "Мой ЦС" и должен быть помещен в хранилище ЦС для текущего пользователя. Мы используем SHA-256. Ключ предназначен для подписи (-sky).
закрытый ключ должен храниться в MyCA.pvk файл, и сертификат в MyCA.CER-файл.
импорт сертификата CA
потому что нет смысла иметь сертификат CA, если вы не доверяете ему, вам нужно будет импортировать его в 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.dllhttp://timestamp.globalsign.com/scripts/timstamp.dllhttp://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 и Export-Pfx Certificate.
инструкции создание Самозаверяющих сертификатов с помощью PowerShell.
Это довольно легко с помощью New-SelfSignedCertificate команда в Powershell. Откройте powershell и выполните эти 3 команды.
1) создать сертификат:
$cert = New-SelfSignedCertificate-DnsName www.yourwebsite.com - Тип CodeSigning-Certstorelocation Cert:\CurrentUser\My2) Установить пароль:
$CertPassword = ConvertTo-SecureString - Строка "my_passowrd" - сила –AsPlainText3) экспорт:
Экспорт-PfxCertificate -Серт "сертификат:\текущий пользователь\мои\$($сертификата.Отпечаток большого пальца)" -Путь_к_файлу "d:\selfsigncert.pfx " - пароль $CertPasswordсертификат selfsigncert.pfx будет располагаться @
D:/
необязательный шаг: вам также потребуется добавить пароль сертификата к системным переменным среды. сделать это, введя ниже в cmd:
setx CSC_KEY_PASSWORD "my_password"
как указано в ответе, чтобы использовать не устаревший способ подписать свой собственный скрипт, следует использовать New-SelfSignedCertificate.
создания ключа:
New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\Myэкспорт сертификата без закрытого ключа:
Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt[0] сделает эту работу для случаев, когда у вас есть более одного сертификата... Очевидно, чтобы индекс соответствовал сертификату, который вы хотите использовать... или использовать способ фильтрации (по отпечатку пальца или эмитента).импортируйте его как доверенный издатель
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisherимпортируйте его как корневой центр сертификации.
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Rootподписать скрипт.
Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)очевидно, как только вы настроили ключ, вы можете просто подписать любые другие сценарии с ним.
Вы можете получить более подробную информацию и помощь по устранению неполадок в этот статья.
Comments