Как Подписать Свой Первый Сценарий За 48 Часов



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

NET-программист. Сценарий? Однозначно да, но устанавливать сторонний переводчик на боевую машину под управлением Windows - это совсем не по-христиански.

Так почему бы не использовать Windows Powershell? Готов сразу честно признаться: опыта общения с ним у меня практически не было, но выглядел он слишком заманчиво.

Скрипт, решивший проблему, был готов за 15 минут, если не считать одного «но».

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

Бесполезно с точки зрения PowerShell. Всему есть разумное объяснение — конечно, на выполнение скриптов накладываются определенные ограничения, установленные политика выполнения скриптов .

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

Однако проблема, которую можно решить для локальной машины, временно изменив политику выполнения на Неограниченный или, правильнее, Удаленноподписанный ИМХО, на рабочем сервере он поднимается всерьез.

Всегда есть выход. Логично, что готовый скрипт нужно подписать для выполнения.

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

После двух дней мучений дома и в офисе представляю публике небольшую инструкцию по подписанию скриптов для PowerShell.



Решение

По умолчанию выполнение любых скриптов запрещено.

Во-первых, вам необходимо разрешить запуск только подписанных скриптов от доверенных издателей с доверенным корневым сертификатом.

В сеансе администрирования Powershell:

> Set-ExecutionPolicy AllSigned

Дальнейшие танцы с бубном касаются утилиты создания root и личных сертификатов.

Все сертификаты, согласно «инструкции» по подписанию скриптов.



> Get-Help About_Signing

создаются с помощью утилиты makecert.exe находится в %Program Files%\Microsoft SDKs\Windows\v7.0A\bin\makecert Следующие два шага выполняются в рамках обычного сеанса командной строки:

> makecert -n "CN=PowerShell Local Certificate Root" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer -ss Root -sr localMachine > makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

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

Самый популярный «бесплатный» способ получения сертификата.

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

Если все прошло хорошо, обе строки должны показать результат. Удалось .

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

PowerShell:

> Get-Childitem cert:\CurrentUser\my -codesigning

Подписывать скрипты уже можно, но в этом случае для подписания скрипта каждый раз потребуется следующая строка Powershell:

> Set-AuthenticodeSignature "FileName" @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

Логично было бы создать скрипт, который будет подписывать другие скрипты.

Скрипт необходимо создать в любом текстовом редакторе, кроме PowerShell ISE. Скрипты, созданные внутри этой среды, будут иметь проблемы с подписью в форме.

Неизвестная ошибка .

Решение было принято Здесь .

Сам скрипт выглядит так:

param([string] $file=$(throw "Please specify a filename.")) $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0] Set-AuthenticodeSignature $file $cert

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

> .

\Add-Signature.ps1 MyScript.ps1



О грустном

На любой машине, кроме той, на которой был создан сертификат:
  1. Если корневой сертификат не является доверенным, сценарий вообще не сможет выполниться.

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

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

ММК с оборудованием Сертификаты .

Добавляйте сертификаты в папки доверенные корневые центры сертификации И Доверенные издатели .

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

Прошу знающих помочь прояснить ситуацию и указать ссылку, если это возможно.

Теги: #PowerShell #Windows 7 #сценарии

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.