Как подписать скрипт PowerShell сертификатом | Windows для системных администраторов

Как подписать скрипт PowerShell сертификатом

Наличие цифровой подписи у скрипта или исполняемого файла позволяет пользователю удостовериться, что файл является оригинальным, и в том, что его код не был изменен третьими лицами. В PowerShell также имеется встроенная возможность подписать файл скрипта *.ps1.

Подписать скрипт  PowerShell можно с помощью специального типа сертификата  Code Signing. Этот сертификат может быть получен от внешнего коммерческого центра сертификации,  внутреннего  корпоративного CA или самоподписанного сертификата (естественно, это не самый лучший вариант).

Предположим, у нас в домене развернуты службы PKI — Active Directory Certificate Services. Запросим новый сертификат, перейдя на страницу   https://CA-server-name/certsrv и запросить новый сертификат с шаблоном Code Signing (данный шаблон должен быть предварительно разрешен в консоли Certification Authority).

Шаблон сертификата code signing

Установите полученный сертификат в локальное хранилище сертификатов вашего компьютера.

После того, как сертификат получен, настроим политику исполнения скриптов PowerShell, разрешив запуск только подписанных скриптов. Значение политики по-умолчанию (Restricted) блокирует выполнение любых скриптов. Чтобы разрешить запуск подписанных скриптов,  можно изменить тип политики на AllSigned или RemoteSigned, разница между которыми в том, что RemoteSigned требует наличие подписи только для скриптов, полученных из интернета.

Set-ExecutionPolicy AllSigned –Force

В отдельный объект сохраним сертификат из локального хранилища для текущего пользователя:

$cert = (Get-ChildItem cert:\CurrentUser\my –CodeSigningCert)[0]

Затем подпишем скрипт с помощью данного сертификата:

Set-AuthenticodeSignature -Certificate $cert -FilePath C:\PS\test_script.ps1

Совет. При создании самоподписанного сертфиката для подписывания кода  с помощью комндлета New-SelfSignedCertificate, нужно указать тип сертификата CodeSigning:

New-SelfSignedCertificate -DnsName test1 -Type CodeSigning

После генерации сертификата, его нужно будет в консоли управления хранилищем сертификатов (certmgr.msc) перенести из контейнера Intermediate в Trusted Root.

Подписать скрипт этим сертификатом можно так:

Set-AuthenticodeSignature C:\PS\test_script.ps1 @(gci Cert:\LocalMachine\My -DnsName test1 -codesigning)[0]

Шаблон сертификата code signingПосле того, как PowerShell скрипт подписан, в текстовый файл скрипта ps1 добавится блок сигнатуры подписи, обрамленный строками

# SIG # Begin signature block
...........
...........
# SIG # End signature block

# SIG # Begin signature blockПри первой попытке запустить скрипт появится предупреждение, если выбрать [A] Always run, при запуске скриптов, подписанных этим сертификатом, предупреждение появляться более не будет.

Do you want to run software from this untrusted publisher?

File C:\PS\test_script.ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted  publishers.

Do you want to run software from this untrusted publisher?

Совет. Корневой сертификат CA, с помощью которого был подписан скрипт должен быть доверенным (иначе скрипт вообще не запустится). Сертификат, которым подписан сам скрипт также должен быть доверенным, иначе скрипт будет запускаться с подтверждением. Тут вам в помощь статья: Как добавить сертификаты на ПК домена с помощью GPO

Что произойдет, если изменить код подписанного скрипта PowerShell? Его запуск будет заблокирован,  с указанием, что содержимое скрипта было изменено.

C:\PS\test_script.ps1 : File C:\PS\test_script.ps1 cannot be loaded. The contents of file C:\PS\test_script.ps1 might  have been changed by an unauthorized user or process, because the hash of the file does not match the hash stored in the digital signature. The script cannot run on the specified system.

The contents of file C:\PS\test_script.ps1 might  have been changed by an unauthorized user or process, because the hash of the file does not match the hash stored in the digital signatureТаким образом, любая модификация подписанного скрипта потребует его переподписывания.

Еще записи по теме: PowerShell
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.24MB/0.00104 sec