РАЗДЕЛ about_signing КРАТКОЕ ОПИСАНИЕ Описание процедуры подписания скриптов для их соответствия политикам исполнения Windows PowerShell. ПОЛНОЕ ОПИСАНИЕ Политика ограниченного исполнения не разрешает выполнение никаких скриптов. Политики исполнения AllSigned и RemoteSigned не дают Windows PowerShell выполнять скрипты без цифровой подписи. Здесь объясняется, как выполнять неподписанные скрипты при установленной политике исполнения RemoteSigned, а также как подписывать скрипты для собственного использования. Дополнительные сведения о политиках исполнения Windows PowerShell см. в разделе about_Execution_Policy. РАЗРЕШЕНИЕ ВЫПОЛНЕНИЯ ПОДПИСАННЫХ СКРИПТОВ ------------------------------- При первом запуске Windows PowerShell на компьютере вероятнее всего будет действовать установленная по умолчанию политика ограниченного исполнения. Политика ограниченного исполнения не разрешает выполнение никаких скриптов. Чтобы узнать, какая политика исполнения действует на компьютере, введите следующую команду: get-executionpolicy Для выполнения неподписанных скриптов, созданных на локальном компьютере, и подписанных скриптов других пользователей, нужно использовать следующую команду для изменения политики исполнения на RemoteSigned: set-executionpolicy remotesigned Дополнительные сведения см. в описании командлета Set-ExecutionPol icy. ВЫПОЛНЕНИЕ НЕПОДПИСАННЫХ СКРИПТОВ (ПОЛИТИКА ИСПОЛНЕНИЯ REMOTESIGNED) -------------------------------------------------------------------- Если в Windows PowerShell установлена политика исполнения RemoteSigned, Windows PowerShell не будет выполнять неподписанные скрипты, загруженные из Интернета, в том числе неподписанные скрипты, полученные по электронной почты и через программы обмена мгновенными сообщениями. При попытке выполнить загруженный скрипт Windows PowerShell выводит следующее сообщение об ошибке: Файл <file-name> невозможно загрузить. Файл <file-name> не имеет цифровой подписи. Скрипт не будет выполнен в системе. Чтобы получить дополнительные сведения, введите команду "Get-Help about_signing". Перед выполнением скрипта проверьте его код, чтобы убедиться в его надежности. Скрипты делают то же, что и исполняемые программы. Выполнение неподписанного скрипта: 1. Сохраните файл скрипта на компьютер; 2. Нажмите кнопку Пуск, откройте раздел "Мой компьютер" и найдите сохраненный файл скрипта. 3. Щелкните правой кнопкой мыши файл скрипта и выберите пункт "Свойства". 4. Щелкните пункт "Разблокировать". Если загруженный из Интернета скрипт имеет цифровую подпись, но издатель подписи еще не входит в число надежных, Windows PowerShell выводит следующее сообщение: Запустить программу от ненадежного издателя? Файл <file-name> опубликован CN=<publisher-name>. Этот издатель не помечен как надежный в данной системе. Выполнять следует только скрипты надежных издателей. [V] Никогда не выполнять [D] Не выполнять [R] Выполнить один раз [A] Всегда выполнять [?] Справка (по умолчанию "D"): Если вы доверяете издателю, выберите "Выполнить один раз " или "Выполнять всегда". Если вы не доверяете издателю, выберите "Никогда не выполнять" или "Не выполнять". При выборе пункта "Никогда не выполнять" или "Всегда выполнять" Windows PowerShell больше не будет запрашивать о действии для этого издателя. МЕТОДЫ ПОДПИСИ СКРИПТОВ -------------------------- Пользователь может подписывать написанные им скрипты и скрипты, полученные из других источников. Прежде чем подписывать скрипт, нужно проверить все содержащиеся в нем команды, чтобы убедиться в его безопасности. Рекомендации по подписанию кода см. в документе "Рекомендации по подписанию кода" (Code-Signing Best Practices) по адресу https://go.microsoft.com/fwlink/?LinkId=119096. Дополнительные сведения о подписании файлов скриптов см. в описании командлета Set-AuthenticodeSignature. Чтобы добавить в скрипт цифровую подпись, нужно подписать его с помощью сертификата подписи исходного кода. Для подписания файла скрипта можно использовать сертификаты двух типов: -- Сертификаты, создаваемые центрами сертификации: Центры сертификации за плату подтверждают личность пользователя и выдают ему сертификат для подписания кода. При приобретении сертификата в заслуживающем доверия центре сертификации пользователь может отправлять свой скрипт пользователям других компьютеров под управлением Windows, поскольку эти другие компьютеры доверяют центру сертификации. -- Создаваемые вами сертификаты: Пользователи могут создавать собственные сертификаты для подписи, в которых в качестве центра сертификации выступает компьютер пользователя. Эти сертификаты бесплатные и позволяют создавать, подписывать и выполнять скрипты на собственном компьютере. Однако скрипты, подписанные самим пользователем, не будут работать на других компьютерах. Обычно сертификаты, подписанные самим пользователем, используются только для подписания скриптов, которые созданы этим пользователем для собственного использования, а также для подписания проверенных скриптов, полученных из других источников. Они не подходят для скриптов, которые будут использоваться несколькими пользователями, даже на одном предприятии. При создании собственного сертификата подписи обязательно нужно включить высокий уровень защиты сертификата с закрытым ключом. Это предотвратит подписание скриптов вредоносными программами от лица пользователя. Необходимые инструкции содержатся в конце настоящего раздела. СОЗДАНИЕ САМОЗАВЕРЕННОГО СЕРТИФИКАТА -------------------------------- Для создания собственного сертификата подписи нужно использовать инструмент для создания сертификатов (MakeCert.exe). Этот инструмент входит в состав комплектов Microsoft .NET Framework SDK (версии 1.1 и более поздние) и Microsoft Windows SDK. Дополнительные сведения о синтаксисе и описание параметров инструмента MakeCert.exe см. в документе "Инструмент для создания сертификатов (MakeCert.exe)" (Certificate Creation Tool (MakeCert.exe)) в библиотеке MSDN по адресу https://go.microsoft.com/fwlink/?LinkId=119097. Чтобы использовать инструмент MakeCert.exe для создания сертификата, нужно выполнить следующие команды в окне командной строки SDK. Примечание. Первая команда создает локальный центр сертификации для вашего компьютера. Вторая команда генерирует персональный сертификат из центра сертификации. Примечание. Команды можно копировать или вводить точно так же, как они выглядят. Заменять ничего не нужно, хотя имя сертификата можно изменять. 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 Средство MakeCert.exe предложит ввести пароль для закрытого ключа. Использование пароля обеспечит невозможность использования сертификата без ведома владельца. Необходимо выбрать пароль, который можно запомнить. Этот пароль потребуется позднее для получения сертификата. Чтобы убедиться в правильности создания скрипта, нужно использовать следующую команду для получения сертификата в хранилище сертификатов на компьютере. (Файл сертификата нельзя найти в каталоге файловой системы). В командной строке Windows PowerShell введите: get-childitem cert:\CurrentUser\my -codesigning Эта команда использует поставщик сертификатов Windows PowerShell для просмотра информации о сертификате. Если сертификат создан, в выходных данных отображается идентификационный отпечаток сертификата, выглядящий примерно так: Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My Thumbprint Subject ---------- ------- 4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ] ПОДПИСЬ СКРИПТА ------------- После создания собственного сертификата подписи пользователь может подписывать скрипты. Если использовать политику исполнения AllSigned, подписание скрипта позволит выполнить скрипт на локальном компьютере. Следующий образец скрипта, Add-Signature.ps1, подписывает скрипт. Однако при использовании политики исполнения AllSigned необходимо подписать скрипт Add-Signature.ps1 перед его выполнением. Для использования этого скрипта нужно скопировать следующий текст в текстовый файл и назвать его Add-Signature.ps1. Примечание. Файл скрипта не должен иметь расширение TXT. Если текстовый редактор добавляет расширение TXT, нужно заключить имя файла в кавычки следующим образом: "add-signature.ps1". ## add-signature.ps1 ## Signs a file param([string] $file=$(throw "Please specify a filename.")) $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0] Set-AuthenticodeSignature $file $cert Чтобы подписать файл скрипта Add-Signature.ps1, нужно ввести следующие команды в командной строке Windows PowerShell: $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0] Set-AuthenticodeSignature add-signature.ps1 $cert После подписания скрипта можно выполнить его на локальном компьютере. Однако скрипт не будет работать на компьютерах, где политика исполнения Windows PowerShell требует цифровой подписи центра сертификации. При попытке выполнения скрипта без такой цифровой подписи Windows PowerShell выводит следующее сообщение об ошибке: Не удается загрузить файл C:\remote_file.ps1. Невозможно проверить подпись сертификата. В строке:1 знак:15 + .\ remote_file.ps1 <<<< Если Windows PowerShell выводит это сообщение при выполнении скрипта, созданного другим пользователем, необходимо работать с этим файлом, как и с любым неподписанным скриптом. Чтобы определить, можно ли доверять скрипту, нужно проверить код. НАДЕЖНАЯ ЗАЩИТА СЕРТИФИКАТА ЗАКРЫТЫМ КЛЮЧОМ ------------------------------------------- Если на компьютере установлен личный сертификат, вредоносные программы могут подписывать скрипты от имени пользователя, что разрешает Windows PowerShell выполнять их. Чтобы предотвратить автоматическое подписание скриптов от лица пользователя, нужно использовать диспетчер сертификатов (Certmgr.exe) для экспорта сертификата подписи в файл PFX. Диспетчер сертификации входит в комплектацию комплектов Microsoft .NET Framework SDK и Microsoft Windows SDK и в браузер Internet Explorer версии 5.0 и выше. Экспорт сертификата. 1. Запустите диспетчер сертификации. 2. Выберите сертификат, выданный центром сертификации PowerShell Local Certificate Root. 3. Нажмите кнопку "Экспортировать", чтобы запустить мастер экспорта сертификатов. 4. Выберите пункт "Да, экспортировать закрытый ключ" и нажмите кнопку "Далее". 5. Выберите "Включить надежную защиту". 6. Введите пароль и повторите ввод для подтверждения пароля. 7. Введите имя файла с расширением PFX. 8. Нажмите кнопку "Готово". Повторный импорт сертификата. 1. Запустите диспетчер сертификации. 2. Нажмите кнопку "Импортировать", чтобы запустить мастер импорта сертификатов. 3. Откройте каталог с файлом PFX, созданным во время экспорта. 4. На странице "Пароль" выберите параметр "Включить высокий уровень защиты сертификата с закрытым ключом" и введите пароль, указанный во время экспорта. 5. Выберите личное хранилище сертификатов. 6. Нажмите кнопку "Готово". ПРЕДОТВРАЩЕНИЕ ИСТЕЧЕНИЯ СРОКА ДЕЙСТВИЯ ПОДПИСИ ----------------------------------- Цифровая подпись скрипта действительна в течение срока действия сертификата подписи или в течение времени, пока сервер временных меток может подтвердить, что скрипт был подписан в период действия сертификата подписи. Поскольку большинство сертификатов подписи действуют всего один год, использование сервера временных меток позволит пользователям использовать скрипт в течение многих лет. СМ. ТАКЖЕ about_Execution_Policies about_Profiles Get-ExecutionPolicy Set-ExecutionPolicy Set-AuthenticodeSignature "Введение в подписание кода" (Introduction to Code Signing) (https://go.microsoft.com/fwlink/?LinkId=106296)