Найти тему

Подписать PowerShell скрипт с помощью сертификата

В домене усилили безопасность и запретили запуск PowerShell скриптов (ps1). Все мои скрипты на серверах перестали работать. Спорить бесполезно, нужно подписать все PowerShell скрипты с помощью сертификата.

Для подписывания PowerShell скриптов нужно использовать специальный сертификат типа Code Signing. Для того чтобы скрипты работали на всех серверах домена, этот сертификат должен быть получен от внутреннего корпоративного центра сертификации Certificate Authority (CA).

Коллеги уже разрешили тип сертификата Code Signing в центре сертификации и активировали соответствующий шаблон.

-2

Подписывать сертификаты я буду на своём компьютере, поэтому нужно сгенерировать сертификат. Открываем оснастку mmc, добавляем "Сертификаты (текущий пользователь)".

-3

В личных сертификатах делаем запрос запрос на создание нового сертификата.

-4

Открывается мастер.

-5

Далее.

-6

Далее.

-7

Делаем запрос на Code Signing сертификат, ставим галку. Заявка.

-8

Делается запрос.

-9

Готово.

-10

Таких сертификатов может быть несколько. Посмотреть список сертификатов, которыми можно подписать:

Get-ChildItem cert:\CurrentUser\my -CodeSigningCert
-11

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

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

Подписываем наш PowerShell скрипт:

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

Можно подписать сразу все файлы в папке:

Get-ChildItem C:\PS\*.ps1 | Set-AuthenticodeSignature -Certificate $cert

Копирую сертификат на нужные сервера и проверяю, что он подписан:

Get-AuthenticodeSignature C:\PS\netbox_vm_backup_schedule.ps1 | ft -AutoSize
-13

На одном сервере Valid.

-14

А на другом HashMismatch. Вот это поворот. Оказалось, что в коде скрипта у меня комментарии на кириллице, а на одном из серверов нет русского языка... вот и комментируй после этого. Проблема устраняется накатыванием русского языка на сервер.

При подписывании PowerShell скрипта, в код скрипта добавляется в конец блок сигнатуры цифровой подписи:

# SIG # Begin signature block
...........
...........
# SIG # End signature block
-15

При первой попытке запустить скрипт на сервере появится предупреждение:

Do you want to run software from this untrusted publisher?
-16

Выбираем [A] Always run. При запуске любых PowerShell скриптов на этом сервере, подписанных этим сертификатом, предупреждение появляться не будет.

P.S.

После внесения изменений в PowerShell скрипт его нужно подписывать заново.

Источник:

Подписать PowerShell скрипт с помощью сертификата | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.