How to sign powershell script (and effectively run it)

Signing my powershell script

Shaken, not stirred…

Во-первых, поправим вызов openssl чтобы сгенерированные подписи совпали — укажем использованные алгоритмы хеширования и паддинга

Так гораздо лучше! Полученную таким образом подпись можно использовать в powershell`е пользуясь методом выше.

Во-вторых — почему-то у меня powershell грузил пару мегабайт входного файла десяток секунд. Это не дело. Размер боевого артефакта может быть и гигабайт, и больше. Сделаем просто и незамысловато: будем подписывать не sha512 от файла, а sha512 от sha512 от файла:

В третьих — legacy. Куда без него!

Всё вышеописанное прекрасно работает на системе с последним openssl, но внезапно на системе сборки очень старый openssl, и нет команды pkeyutl как класса. Есть команда rsautl, но в её параметрах нельзя задать тип хеша и паддинга. А ещё есть команда dgst…Путём научного тыка выясняется, что можно было не городить огород с sha512sum. Ну почти — с учетом необходимости подписывать хеш от хеша.

Чтобы было совсем хорошо, в той версии openssl которая стоит на системе сборки ещё нет параметра -sigopt, но, к нашему счастью, там по дефолту применяется Pkcs1.

В таком виде решение и публичный ключ отправляются клиентам на согласование, а мы ищем куда бы заныкать приватный ключ, так, чтобы не потерять и не засветить.

Ссылки:

https://ru.wikipedia.org/wiki/RSA

https://www.openssl.org/docs/manmaster/man1/openssl.html

https://www.openssl.org/docs/man1.1.1/man1/openssl-pkeyutl.html

https://www.openssl.org/docs/man1.1.1/man1/dgst.html

https://man7.org/linux/man-pages/man1/sha512sum.1.html

https://linux.die.net/man/1/xxd

https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa?view=net-6.0

https://ru.wikipedia.org/wiki/X.509#Общеупотребительные_расширения_файлов_сертификатов

Function

function New-CertificateRequest {param ($subject,[Parameter(Mandatory=$false, HelpMessage = «Please enter the SAN domains as a comma separated list»)

]$SANs,$OnlineCA,$CATemplate = «WebServer»)

### Preparation$subjectDomain = $subject.split(‘,’).split(‘=’)if ($subjectDomain -match «*.») {$subjectDomain = $subjectDomain -replace «*», «star»}$CertificateINI = «$subjectDomain.ini»$CertificateREQ = «$subjectDomain.req»$CertificateRSP = «$subjectDomain.rsp»$CertificateCER = «$subjectDomain.cer»

### INI file generationnew-item -type file $CertificateINI -forceadd-content $CertificateINI ‘’add-content $CertificateINI ‘Signature=»$Windows NT$»’add-content $CertificateINI ”add-content $CertificateINI ‘’$temp = ‘Subject=»’ $subject ‘»’add-content $CertificateINI $tempadd-content $CertificateINI ‘Exportable=TRUE’add-content $CertificateINI ‘KeyLength=2048’add-content $CertificateINI ‘KeySpec=1’add-content $CertificateINI ‘KeyUsage=0xA0’add-content $CertificateINI ‘MachineKeySet=True’add-content $CertificateINI ‘ProviderName=»Microsoft RSA SChannel Cryptographic Provider»’add-content $CertificateINI ‘ProviderType=12’add-content $CertificateINI ‘SMIME=FALSE’add-content $CertificateINI ‘RequestType=PKCS10’add-content $CertificateINI ‘’add-content $CertificateINI ‘szOID_ENHANCED_KEY_USAGE = «2.5.29.

37″’add-content $CertificateINI ‘szOID_PKIX_KP_SERVER_AUTH = «1.3.6.1.5.5.7.3.1»’add-content $CertificateINI ‘szOID_PKIX_KP_CLIENT_AUTH = «1.3.6.1.5.5.7.3.2»’if ($SANs) {add-content $CertificateINI ‘szOID_SUBJECT_ALT_NAME2 = «2.5.29.17»’add-content $CertificateINI ‘’add-content $CertificateINI ‘2.5.29.17 = «{text}»’

foreach ($SAN in $SANs) {$temp = ‘_continue_ = «dns=’ $SAN ‘&»’add-content $CertificateINI $temp}}

### Certificate request generationif (test-path $CertificateREQ) {del $CertificateREQ}certreq -new $CertificateINI $CertificateREQ

### Online certificate request and importif ($OnlineCA) {if (test-path $CertificateCER) {del $CertificateCER}if (test-path $CertificateRSP) {del $CertificateRSP}certreq -submit -attrib «CertificateTemplate:$CATemplate» -config $OnlineCA $CertificateREQ $CertificateCER

certreq -accept $CertificateCER}}

Создание собственной цифровой подписи

Если вы не хотите приобретать цифровой сертификат у стороннего центра сертификации или вам требуется срочно подписать документ, вы можете создать собственный цифровой сертификат, выбрав параметр Создать свое цифровое удостоверение в диалоговом окне Получение цифрового удостоверения.

Создание собственного цифрового сертификата

В диалоговом окне Получение цифрового удостоверения выберите параметр Создать свое цифровое удостоверение.

Важно: Диалоговое окно Получение цифрового удостоверения появится только в том случае, если попытаться поставить цифровую подпись в документе, не имея цифрового сертификата. В диалоговом окне Создание цифрового удостоверения введите следующие сведения для цифровой подписи:

В диалоговом окне Создание цифрового удостоверения введите следующие сведения для цифровой подписи:

В поле Имя введите свое имя.

В поле Адрес электронной почты введите свой адрес электронной почты.

В поле Организация введите название организации или компании.

В поле Расположение укажите свое географическое местоположение.

Примечание: Если подписать документ с применением собственного цифрового сертификата и поделиться им, то другие пользователи не смогут проверить достоверность вашей цифровой подписи. Ваша цифровая подпись может быть проверена только на том компьютере, где она была создана.

Installing a pfx certificate

The certificate can be installed in a different store location, each store location has its specific purpose but in this article, we will install into four locations , , and . My location is the personal store for untrusted application and Root is the store for trusted certificates.

The command used to install a common certificate is different from the command to install a PFX certificate. The Powershell Cmdlet is used to install a pfx certificate.

To install a PFX certificate to the current user’s personal store, use the command below:

Enter fullscreen modeExit fullscreen mode

To install into the system personal location change the store location in the command above from to

To install a PFX certificate the current user’s trusted store, use the command below:

Enter fullscreen modeExit fullscreen mode

Installing into the current user Root location will pop up a dialog to confirm the certificate installation but installing into the system Root location will not pop up any dialog.

To install into the system trusted location change the store location in the command above from to

Ошибки при запуске скрипта PowerShell

Как запустить скрипт PowerShell в Windows-02

Так же вы можете увидеть ошибку после запуска установленного PowerCLI:

Import-Module : Невозможно загрузить файл C:\Program Files\WindowsPowerShell\Modules\VMware.VimAutomation.Sdk\12.2.0.17 531155\VMware.VimAutomation.Sdk.psm1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170. строка:1 знак:1 + Import-Module VMware.PowerCLI + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : Ошибка безопасности: (:) , PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

PowerShell обладает рядом режимов исполнения, которые определяют, какой тип кода разрешается выполнять. Все это управляется ключом реестра, живущим в HKLM. Существует 4 различных режима исполнения:

  • Ограниченный (Restricted): Политика исполнения по умолчанию, не допускает работу скриптов и разрешает работу лишь интерактивных команд.
  • Все подписанные (All Signed): Допускает работу всех скриптов. Правда, все скрипты и файлы конфигурации должны быть подписаны издателем, которому вы доверяете; данный режим подвергает вас риску работы подписанных (но вредоносных) скриптов, после получения подтверждения доверия издателю.
  • Удаленные подписанные (Remote Signed): Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
  • Неограниченный (Unrestricted): Все скрипты и файлы конфигурации, полученные из коммуникационных приложений, вроде Microsoft Outlook, Internet Explorer, Outlook Express и Windows Messenger работают после подтверждения, что вы понимаете, что файл исходит из Интернета; никакие цифровые подписи не требуются; данный режим подвергает вас риску работу неподписанных, вредоносных скриптов.

По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, PowerShell работает лишь как интерактивная оболочка. Он не допускает работу скриптов, и загружает лишь те файлы конфигурации, которые подписаны издателем, которому вы доверяете.

Using the Code Signing Certificate

Since the certificate store is mapped as a PSDrive automatically we can check if a code signing certificate is available directly from PowerShell. Having PowerShell have access to the certificate store allows to very easy manipulation and signing scripts and other files, the cmdlets for working with Authenticode are:

  • Get-AuthenticodeSignature checks the Authenticode signatures for files that support Subject Interface Package (EXE, PS1, PSXML, DLL, VBS ..etc.

Set-AuthenticodeSignature adds an Authenticode signature for files that support Subject Interface Package

In fact the cmdlets as we can see not only allow us to sign PowerShell Scripts and Modules but we can also sing several windows files.

To list the certificates we can just use the certificate store like any drive and ask to only show code signing certificates using the –CodeSigningCert parameter when Certificate Store PSDrive is used

For signin the certificate must be passed as a object to the Set-AuthenticodeSignature cmdlet so we may need to save it in to a variable. Signing of a script would be like this:

PS C:\>

$acert=(dirCert:\CurrentUser\My-CodeSigningCert)[PS C:\> Set-AuthenticodeSignature.\hello.ps1-Certificate$acert

Now when we check our script we will see it is signed:

PS C:\>

Get-AuthenticodeSignature.\hello.ps1|ft-AutoSize

Directory: C:\Users\Carlos Perez\Desktop

SignerCertificate Status Path

—————— —— —-

9854ABA48101875C7D9A7F79F8DD0B71C911F73C Valid hello.ps1

The script should now look like this:

So I hope you liked the blog post and found it informative on the second part I will cover how to bypass the execution policy and how an attacker or malware may abuse it.

Выполнение неподписанных скриптов с помощью политики выполнения RemoteSigned

Если политика выполнения PowerShell является RemoteSigned, PowerShell не будет запускать неподписанные скрипты, скачанные из Интернета, включая неподписанные скрипты, которые вы получаете через электронную почту и программы обмена мгновенными сообщениями.

При попытке запустить скачанный скрипт PowerShell отобразит следующее сообщение об ошибке:

Перед запуском скрипта просмотрите код, чтобы убедиться, что вы доверяете ему.
Скрипты имеют тот же эффект, что и любая исполняемая программа.

Чтобы запустить неподписанный скрипт, используйте командлет Unblock-File или выполните следующую процедуру.

  1. Сохраните файл скрипта на компьютере.
  2. Нажмите кнопку «Пуск», щелкните «Мой компьютер» и найдите сохраненный файл скрипта.
  3. Щелкните правой кнопкой мыши файл скрипта и выберите пункт «Свойства».
  4. Нажмите кнопку Снять блокировку.

Если скрипт, скачанный из Интернета, имеет цифровую подпись, но вы еще не решили доверять издателю, PowerShell отобразит следующее сообщение:

Если вы доверяете издателю, выберите «Выполнить один раз» или «Всегда выполнять». Если вы не доверяете издателю, выберите «Никогда не выполняться» или «Не запускать». Если выбрать «Никогда не выполняться» или «Всегда выполнять», PowerShell не будет предлагать вам повторно для этого издателя.

Signing the Powershell Code

Now, we can proceed signing the Powershell code (this is valid for both .ps1 and .psm1 files) by using the Set-AuthenticodeSignature cmdlet in Powershell, as follows:

Set-AuthenticodeSignature -FilePath C:\Scripts\demo-script1.ps1 -Certificate (Get-ChildItem -Path Cert:\CurrentUser\My\ -CodeSigningCert)

After that, we will get an output similar to this:

Directory: C:\Scripts\

SignerCertificate                         Status             Path
-----------------                         ------             ----
A180G4B81AA81143AD2969114E26A2CC2D2AD65B  Valid              demo-script1.ps1

As you see, the status is valid, so the signing was successfully done. Please note that we recommend that you supply also the TimeStampServer parameter (not included in the above example). This will make sure the script works even though the certificate that signed it is expired. It will tell the system that the code signing certificate was valid at the time of signing.

If you do not use the TimeStampServer parameter, the script will stop to work when the certificate used for signing expires. There are multiple online sources for timestamping out there.

The signing process actually modifies the end of the script with a signature block. For example, if the demo-script1.ps1 consisted of the following code:

param (  $You = $(read-host "Enter your first name") )
write-host "$You so totally rocks"

After the script is signed, it looks like this:

param (  $You = $(read-host "Enter your first name") )
write-host "$You so totally rocks"

# SIG # Begin signature block
# MIIEMwYJKoZIhvcNAQcCoIIEJDCCBCACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU6vQAn5sf2qIxQqwWUDwTZnJj
...snip...
# m5ugggI9MIICOTCCAaagAwIBAgIQyLeyGZcGA4ZOGqK7VF45GDAJBgUrDgMCHQUA
# Dxoj+2keS9sRR6XPl/ASs68LeF8o9cM=
# SIG # End signature block

Использование самоподписанного ssl сертификата sha-256 в iis

Обратите внимание, что при создании самоподписанный сертификат для IIS через консоль Internet Information Manager (пункт меню Create Self-Signed Certificate), создается сертификат с исопльзованием алгоритма шифрования SHA-1. Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS

Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS

Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS.

Запустите консоль IIS Manager, выберите ваш сайт, затем в настройке Site Binding, выберите созданный вами сертификат и сохраните изменения.

How to download the ssl certificate from a website using powershell?

You should be able to get the public key by using the property on the object. This necessary information will be populated once we have made a http request to the site in question.

If the request is made to a site which has an untrusted certificate the GetResponse method will throw an exception, However, the will still contain the so we want to ensure we ignore if the status is a trust failure.

So something like the following should work:

If you want to call the method many times and some might have the same address, you might want to improve the function by using the method, since it will return a cached version if a request has already been made to that site. So you could check if the service point has been populated with information. If it hasn’t, make the web request. If it has, just use the already existing information, saving yourself an http request.

Code Signing practice with a Self-Signed Certificate

Let’s start creating a self-signed certificate and use it for practice

New-SelfSignedCertForCodeSigning.ps1

PowerShell

#requires -runasadministrator

# Paolo Frigo, https://www.scriptinglibray.com

# This scripts generates a self-signed certificate for CodeSigning and exports to a PFX Format

#SETTINGS
$CertificateName = «Paolo’s Signing Certificate»
$OutPutPFXFilePath = «D:\MyNewSigningCertificate.pfx»
$MyStrongPassword = ConvertTo-SecureString -String «MySuperStrongPassword!» -Force -AsPlainText

New-SelfSignedCertificate -subject $CertificateName -Type CodeSigning | Export-PfxCertificate -FilePath $OutPutPFXFilePath -password $MyStrongPassword
Write-Output «PFX Certificate `»$CertificateName`» exported: $OutPutPFXFilePath»

1
2
3
4
5
6
7
8
9
10
11
12
13
14

#requires -runasadministrator
 
# Paolo Frigo, https://www.scriptinglibray.com
 
# This scripts generates a self-signed certificate for CodeSigning and exports to a PFX Format
 
#SETTINGS

$CertificateName=»Paolo’s Signing Certificate»

$OutPutPFXFilePath=»D:\MyNewSigningCertificate.pfx»

$MyStrongPassword=ConvertTo-SecureString-String»MySuperStrongPassword!»-Force-AsPlainText

New-SelfSignedCertificate-subject$CertificateName-TypeCodeSigning|Export-PfxCertificate-FilePath$OutPutPFXFilePath-password$MyStrongPassword

Write-Output»PFX Certificate `»$CertificateName`» exported: $OutPutPFXFilePath»

Наводим порядок в Active Directory с помощью ЗУП / ЗИКГУ 3.1 (идентификация, отключение и актуализация учетных записей пользователей)

Продолжаем использовать ЗУП 3.1 совместно с LDAP во имя автоматизации работы системного администратора. В этот раз займемся аудитом учетных записей. Обработка производит сопоставление учетной записи с данными сотрудников из ЗУП, причем с учетом недавних событий (для перехода на ЗУП 3.1 чаще всего используется рекомендованный перенос, не включающий уволенных сотрудников) есть возможность использовать объединенные с помощью COM-соединения данные ЗУП 2.5 и ЗУП 3.1. Также в данной обработке есть возможность массовой корректировки, заполнения данных и отключения учетных записей. Перед использованием обработки для душевного спокойствия необходимо сделать резервную копию Active Directory любым удобным способом. Протестировано на ЗУП 3.1.6 — 3.1.8.

5 стартмани

19

Требования к операционной системе

Windows PowerShell 5.1

Windows PowerShell 5.1 выполняется в следующих версиях Windows: Для запуска Windows PowerShell 5.1 установите Windows Management Framework 5.1. Дополнительные сведения см. в статье Установка и настройка WMF 5.1.

Версия Windows Требования к системе
Windows Server 2022 Устанавливается по умолчанию
Windows Server 2019 Устанавливается по умолчанию
Windows Server 2016 Устанавливается по умолчанию
Windows Server 2012 R2 Установите Windows Management Framework 5.1
Windows Server 2012 Установите Windows Management Framework 5.1
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1
Windows 11 Устанавливается по умолчанию
Windows 10 версии 1607 и выше Устанавливается по умолчанию
Windows 10 версии 1507, 1511 Установите Windows Management Framework 5.1
Windows 8.1 Установите Windows Management Framework 5.1
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1

Windows PowerShell 5.0

Windows PowerShell 5.0 работает в следующих версиях Windows. Для запуска Windows PowerShell 5.0 установите Windows Management Framework 5.1. Дополнительные сведения см. в статье Установка и настройка WMF 5.1. Windows Management Framework 5.1 заменяет Windows Management Framework 5.0.

Версия Windows Требования к системе
Windows Server 2022 Более поздняя версия устанавливается по умолчанию
Windows Server 2019 Более поздняя версия устанавливается по умолчанию
Windows Server 2016 Более поздняя версия устанавливается по умолчанию
Windows Server 2012 R2 Установите Windows Management Framework 5.1
Windows Server 2012 Установите Windows Management Framework 5.1
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1
Windows 11 Более поздняя версия устанавливается по умолчанию
Windows 10 версии 1607 и выше Более поздняя версия устанавливается по умолчанию
Windows 10 версии 1507, 1511 Устанавливается по умолчанию
Windows 8.1 Установите Windows Management Framework 5.1
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 5.1

Windows PowerShell 4.0

Windows PowerShell 4.0 выполняется в следующих версиях Windows: Чтобы запустить Windows PowerShell 4.0, установите указанную версию Windows Management Framework для вашей операционной системы.

Версия Windows Требования к системе
Windows 8.1 Устанавливается по умолчанию
Windows Server 2012 R2 Устанавливается по умолчанию
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 4.0
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 4.0

Windows PowerShell 3.0

Windows PowerShell 3.0 выполняется в следующих версиях Windows: Чтобы запустить Windows PowerShell 3.0, установите указанную версию Windows Management Framework для вашей операционной системы.

Версия Windows Требования к системе
Windows 8 Устанавливается по умолчанию
Windows Server 2012 Устанавливается по умолчанию
Windows 7 с пакетом обновления 1 (SP1) Установите Windows Management Framework 3.0
Windows Server 2008 R2 с пакетом обновления 1 (SP1) Установите Windows Management Framework 3.0
Windows Server 2008 с пакетом обновления 2 (SP2) Установите Windows Management Framework 3.0

Пример 2

C:\PS>$cert = Get-PfxCertificate C:\Test\Mysign.pfx 
C:\PS>Set-AuthenticodeSignature -Filepath ServerProps.ps1 -Cert $cert

Описание
-----------
Эти команды используют командлет Get-PfxCertificate для поиска сертификата подписи кода. Затем они используют его для подписи скрипта Windows PowerShell. 
Первая команда использует командлет Get-PfxCertificate, чтобы найти сертификат "C:\Test\MySign.pfx" и сохранить его в переменной $cert.
Во второй команде командлет Set-AuthenticodeSignature используется для подписи скрипта. Параметр FilePath подписи Set-AuthenticodeSignature указывает путь к файлу подписываемого скрипта, а параметр Cert передает переменную $cert, в которой содержится сертификат, в Set-AuthenticodeSignature.
Если файл сертификата защищен паролем, то оболочка Windows PowerShell просит ввести пароль.






Конвейер

При создании не очень уж примитивных сценариев или для выполнения каких-либо операций с данными, полученными в результате работы скрипта порой приходится также совершать какие-либо действия.

Для этого существует конвейер. Как и в UNIX, он объединяет команды путём передачи выходных данных одного командлета во входные для другого в неизменном виде, сохраняя свой тип.

При этом не требуются никакой контейнер или посимвольный разбор информации.

В состав передаваемой информации может входить и функция.
После окончания работы объединённых команд вызывается функция превращения информации в текстовый вид (конвертация данных в строковые) с применением форматирования текста.

Changing Execution Policy

Set-ExecutionPolicy

  • Restricted No Script either local, remote or downloaded can be executed on the system.
  • AllSigned All script that are ran require to be digitally signed.
  • RemoteSigned All remote scripts (UNC) or downloaded need to be signed.
  • Unrestricted No signature for any type of script is required.
  • MachinePolicy: The execution policy set by a Group Policy for all users.
  • UserPolicy: The execution policy set by a Group Policy for the current user.
  • Process: The execution policy that is set for the current Windows PowerShell process.
  • CurrentUser: The execution policy that is set for the current user.
  • LocalMachine: The execution policy that is set for all users.

Get-ExecutionPolicy–list

Scope ExecutionPolicy —— —————MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned

Typically for admin workstations I recommend RemoteSigned since any code downloaded from the internet I will not execute it by accident causing harm to my machine. Lets change it from RemoteSigned to Restricted, for this we use the Set-Executionpolicy and give it the policy name, we can use the –Force parameter so it will not ask for confirmation and we can conform by traying to execute a script:

Создать самоподписанный сертфикат типа code signing для подписывания кода

В PoweShell 3.0 командлет New-SelfSifgnedCertificate позволял генерировать только SSL сертификаты, которые нельзя было использоваться для подписывания кода драйверов и приложений (в отличии сертификатов, генерируемых утилитой MakeCert).

В версии PowerShell 5 новая версия командлета New-SelfSifgnedCertificate теперь может использоваться для выпуска сертификатов типа Code Signing.

Для создания самоподписанного сертфиката для подписывания кода приложений, выполните команду:

$cert = New-SelfSignedCertificate -Subject “Cert for Code Signing” -Type CodeSigningCert -CertStoreLocation cert:LocalMachineMy

Теперь можно подписать ваш PowerShell скрипт эти сертификатом:

Set-AuthenticodeSignature -FilePath C:PStest_script.ps1 -Certificate $cert

Если при выполнении команды появится предупреждение UnknownError, значит этот сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя.

Нужно переместить его в корневые сертификаты (не забывайте периодически проверять хранилище сертификатов Windows на наличие недоверенных сертфикатов и обновлять списки корневых сертификатов):

Step 5: Finally Sign Your Powershell Script

Your powershell script can be anywhere, even on a network share.

  • Start a DOS-box, and navigate to the folder where your powershell script is.
  • Type powershell
  • Then type this command to see if the user certificate is visible

PS D:\> dir cert:CurrentUser\My -CodeSigningCert

Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint Subject
———- ——-
0416C2888A4BD94547FB24D5891A7A48930C489F CN=localhost

PS D:\>

Now sign your powershell script, in my case «test.ps1» with echo «Hello world»

$cert=(dir cert:currentuser\my\ -CodeSigningCert)

Set-AuthenticodeSignature test.ps1 $cert

Directory: D:\Powershell

SignerCertificate Status Path

—————— —— —-

33875C…D1F7A81A6415E72695421 Valid test.ps1

If the status is not valid, type this to see what’s wrong (output here truncated).

Get-AuthenticodeSignature test.ps1 | fl *

StatusMessage : Signature verified.

Run the powershell script by typing in the DOS-box on the PS prompt:

.\test1.ps

The first time you will get a warning, answer A for Allways run.

Что такое цифровая подпись?

Цифровая подпись (удостоверение) чаще называется цифровым сертификатом. Для цифрового подписания документа Office требуется действующий цифровой сертификат. Цифровые сертификаты обычно выдаются доверенным центром сертификации (ЦС) — надежной сторонней организацией, которая выпускает цифровые сертификаты.

Цифровой сертификат необходим для цифровой подписи, так как она предоставляет открытый ключ, который можно использовать для проверки закрытый ключ, связанной с цифровой подписью. Цифровые сертификаты позволяют использовать цифровые подписи как способ проверка подлинности цифровой информации.

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: