Как да подпишете PowerShell скрипт със сертификат

Цифровият подпис на скрипта или изпълним файл позволява на потребителя да провери дали файлът е оригинален и че кодът му не е променен от трети страни. PowerShell също има вградена възможност за подписване на * .ps1 файл със скрипт.

Можете да подпишете PowerShell скрипт, като използвате специален тип сертификат  код подписване. Този сертификат може да бъде получен от външен орган за търговско сертифициране, вътрешен корпоративен CA или сертификат, който е самоподписан (естествено, това не е най-добрият вариант).

Да предположим, че в нашия домейн са внедрени PKI - Active Directory Certificate Services. Изискваме нов сертификат, като отидете на страницата https: // CA-име на сървър / certsrv и поискаме нов сертификат с шаблон Подписване на код (този шаблон трябва да бъде предварително разрешен в конзолата на сертифициращия орган).

Инсталирайте получения сертификат в локалния магазин на сертификати на вашия компютър.

След получаване на сертификата ние ще конфигурираме политиката за изпълнение на скриптове PowerShell, позволявайки да се изпълняват само подписани скриптове. Стойността на политиката по подразбиране (Ограничена) блокира изпълнението на всички скриптове. За да разрешите на подписаните скриптове да се изпълняват, можете да промените типа политика на AllSigned или RemoteSigned, разликата между които е, че RemoteSigned изисква подпис само за скриптове, получени от Интернет.

Set-ExecutionPolicy AllSigned -Force

В отделен обект запишете сертификата от локалното хранилище за текущия потребител:

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

Тогава ще подпишем скрипта, използвайки този сертификат:

Set-AuthenticodeSignature -Сертификат $ cert -FilePath C: \ PS \ test_script.ps1

съвет. Когато създавате самоподписан сертификат за подписване на код с помощта на командлета New-SelfSignedCertificate, трябва да посочите типа на сертификата CodeSigning:

New-SelfSignedCertificate -DnsName test1 -Type CodeSigning

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

Можете да подпишете скрипт с този сертификат така:

Set-AuthenticodeSignature C: \ PS \ test_script.ps1 @ (gci Cert: \ LocalMachine \ My -DnsName test1 -кодиране) [0]

След подписването на скрипта PowerShell в текстовия файл на скрипта ps1 ще бъде добавен блок за подпис в рамка с редове

# SIG # Започнете блок за подписване
...
...
# SIG # Край на блока за подписване

При първия опит да стартирате скрипта се появява предупреждение, ако изберете [A] Винаги работи, когато стартирате скриптове, подписани с този сертификат, вече няма да се появява предупреждение.

Искате ли да стартирате софтуер от този ненадежден издател?

Файл C: \ PS \ test_script.ps1 се публикува от CN = test1 и не се вярва на вашата система. Пускайте само скриптове от надеждни издатели.

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

Какво се случва, ако променя кода за подписан скрипт PowerShell? Стартирането му ще бъде блокирано, което показва, че съдържанието на скрипта е променено.

C: \ PS \ test_script.ps1: Файл C: \ PS \ test_script.ps1 не може да бъде зареден. Съдържанието на файл C: \ PS \ test_script.ps1 може да е променено от неоторизиран потребител или процес, тъй като хешът на файла не съвпада с хеша, съхраняван в цифровия подпис. Скриптът не може да се изпълнява в указаната система.

По този начин всяка промяна на подписан скрипт изисква повторно подписване..