Як створити самопідписаний сертифікат для підписання коду за допомогою інструментів з пакета SDK Windows?
Як створити самопідписаний сертифікат для підписання коду за допомогою інструментів з пакета SDK Windows?
Відповіді:
Якщо ви використовуєте такі версії Windows або новіші версії: Windows Server 2012, Windows Server 2012 R2 або Windows 8.1, тепер MakeCert застарілий , і Microsoft рекомендує використовувати PowerShell Cmdlet 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) сертифікат із приватним ключем, який можна експортувати (-pe). Він називається "Мій CA", і його слід розмістити в магазині ЦС для поточного користувача. Ми використовуємо алгоритм SHA-256 . Ключ призначений для підпису (-sky).
Приватний ключ повинен зберігатися у файлі MyCA.pvk, а сертифікат - у файлі MyCA.cer.
Оскільки немає сенсу мати сертифікат CA, якщо ви не довіряєте йому, вам потрібно буде імпортувати його в сховище сертифікатів Windows. Ви можете використовувати Snapin MMC-сертифікати, але з командного рядка:
certutil -user -addstore Root MyCA.cer
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
Деякі можливі URL-адреси часових позначок для signtool /t
:
http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
Для тих, хто не є .NET розробниками, вам знадобиться копія Windows SDK і .NET рамки. Поточне посилання доступне тут: 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" (можливо, всі вони знаходяться в одній папці).
E=your@email
. Напр .:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
щоб cert можна було використовувати для підписання коду (я знаю, що powerhell не в змозі підписати сценарії, якщо його немає)
Як зазначено у відповіді, щоб використовувати непридатний спосіб підписання власного сценарію, слід використовувати New-SelfSignedCertificate .
New-SelfSignedCertificate -DnsName email@yourdomain.com -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)
Очевидно, що після установки ключа, ви можете просто підписати з ним будь-які інші сценарії.
Ви можете отримати більш детальну інформацію та деяку допомогу щодо усунення несправностей у цій статті .
(get-ChildItem ...)
поверненню більше ніж одного cert, тому я поставив "[0]" в кінці, і це спрацювало. Як вExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
Відповідь Роджера була дуже корисною.
Однак у мене виникли невеликі проблеми з його використанням, і я продовжував отримувати червоний діалог "Windows не може перевірити видавця цього програмного забезпечення драйвера" Ключовим моментом було встановити сертифікат root root
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
Використовувати команду New-SelfSignedCertificate в Powershell досить просто . Відкрийте панель повноважень та запустіть ці 3 команди.
1) Створіть сертифікат :
$ cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert: \ CurrentUser \ My2) встановіть пароль для нього :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText3) Експортуйте його :
Export-PfxCertificate -Cert "cert: \ CurrentUser \ My \ $ ($ cert.Thumbprint)" -FilePath "d: \ selfsigncert.pfx" -Password $ CertPassword
Ваш сертифікат 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 .