Перейти к основному содержанию

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

PowerShell

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

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

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

ssl

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

powershell

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

powershell

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

powershell

Далее.

powershell

Далее.

powershell

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

powershell

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

powershell

Готово.

powershell

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

Get-ChildItem cert:\CurrentUser\my -CodeSigningCert

powerchell

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

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

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

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

powershell

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

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

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

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

powershell

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

powershell

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

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

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

powershell

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

Do you want to run software from this untrusted publisher?

powershell

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

P.S.

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

Теги

 

Похожие материалы

Кто подключался к RDP в Windows?

Что-то странное у меня творится с подключением по RDP, постоянно отваливается соединение. Захотелось мне посмотреть кто и откуда коннектился на сервер. Быстрый способ узнать кто и откуда заходил на сервер можно через PowerShell.

Теги