Windows 7 x64, PowerShell 4.0.
Я новичок в работе с ЭЦП, поэтому раньше читал эти статьи:
- https://technet.microsoft.com/en-us/magazine/2008.04.powershell.aspx
- https://msdn.microsoft.com/en-us/library/bfsktky3%28v=vs.100%29.aspx
- https://msdn.microsoft.com/en-us/library/f5cs0acs%28v=vs.100%29.aspx
Мне нужно подписать мои сценарии PowerShell. Эти сценарии должны быть доступны всем пользователям нашего домена Windows. Но сначала я хочу научиться делать это на своем компьютере.
Я установил политику выполнения на значение AllSigned
(с правами администратора):
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy AllSigned
Согласно статье Дона Джонса, я создал свой собственный сертификат (через командную строку разработчика для VS2015 [то есть через cmd.exe
] с правами администратора):
cd c:\temp
makecert -n "CN=Andrey Bushman" -a md5 -r -sv Andrey.Bushman.pvk -ss Root -sr localMachine Andrey.Bushman.cer
Я получил файлы Andrey.Bushman.cer
и Andrey.Bushman.pvk
в моем текущем каталоге. Первый из них имеет размер 1 кб, а второй — 2 кб. Итак, я вижу, что размер закрытого ключа больше размера сертификата.
Вопрос №1
Означает ли это, что мой сертификат не включает копию моего закрытого ключа?
Теперь я вижу новый элемент в хранилище сертификатов:
PS Cert:\LocalMachine\Root> Get-ChildItem | where -Property Issuer -EQ "CN=Andrey Bushman"
Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint Subject
---------- -------
CF26A00BB7C8EB2B1EA66CA307C4B5025F636F9A CN=Andrey Bushman
Затем это сделал Дон Джонс:
makecert -pe -n "CN=MyCertificate" -ss MY
–a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk
–c root.cer
Вопрос №2
Почему он это сделал? До того, как он это сделал, наш сертификат уже был в хранилище cert:LocalMachine\Root
.
По аналогии сделал для своего случая:
makecert -pe -n "CN=Andrey Bushman" -ss MY -a md5 -iv Andrey.Bushman.pvk -ic Andrey.Bushman.cer
Но я ничего не получаю, когда запускаю это:
gci cert:\CurrentUser\My -codesigning
Без флага -codesigning
я получаю это:
PS C:\temp> gci cert:\CurrentUser\My
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
8F0D753ACA7F6631C3D967921BD06E158E1AB1AF CN=Andrey Bushman
Вопрос №3
Почему я ничего не получаю, когда использую флаг -codesigning
?
Хорошо, я пытаюсь подписать какой-то файл и получаю проблему:
PS C:\temp> $cert = @(gci cert:\CurrentUser\My)[0]
PS C:\temp> Set-AuthenticodeSignature -FilePath .\123.ps1 -Certificate $cert
Set-AuthenticodeSignature : It isn't possible to sign the code. The specified certificate isn't suitable for the code signing
а.
line:1 char:1
+ Set-AuthenticodeSignature -FilePath .\123.ps1 -Certificate $cert
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-AuthenticodeSignature], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetAuthenticodeSignatureCommand
Вопрос № 4
Как сделать мой сертификат пригодным для подписывания кода?
UPD
Я не могу задать свой вопрос здесь , потому что я не могу зарегистрироваться на этом сайте (у меня нет почты). Я писал письма на электронную почту службы поддержки, но они никогда не отвечают. Я пытался сделать это несколько лет назад и еще раз несколько дней назад, но получил тот же результат.