Поиск…


замечания

Подписание сценария заставит ваши скрипты соответствовать всем политикам exeuction в PowerShell и обеспечить целостность скрипта. Подписанные сценарии не будут выполняться, если они были изменены после подписания.

Для подписания скриптов требуется сертификат подписи кода. Рекомендации:

  • Персональные скрипты / тестирование (не общие): Сертификат от доверенного органа сертификации (внутреннего или стороннего) или самозаверяющего сертификата.
  • Общая внутренняя организация: сертификат от доверенного органа сертификации (внутреннего или стороннего)
  • Общая внешняя организация: сертификат доверенного лица, уполномоченного третьей стороны

Подробнее о about_Signing @ TechNet

Политика выполнения

У PowerShell есть настраиваемые политики выполнения, которые определяют, какие условия необходимы для сценария или конфигурации, которые будут выполнены. Политика исключения может быть установлена ​​для нескольких областей; компьютер, текущий пользователь и текущий процесс. Политики выполнения можно легко обойти и не предназначать для ограничения пользователей, а скорее защищать их от непреднамеренного нарушения правил подписи.

Доступные политики:

настройка Описание
ограниченный Никаких сценариев не разрешено
AllSigned Все скрипты должны быть подписаны
RemoteSigned Разрешены все локальные скрипты; только подписанные удаленные сценарии
неограниченный Нет требований. Все сценарии разрешены, но будут предупреждать, прежде чем запускать скрипты, загруженные из Интернета
байпас Все сценарии разрешены и не отображаются предупреждения
Неопределенный Удалите текущую политику выполнения для текущей области. Использует родительскую политику. Если все политики не определены, будут использоваться ограничения.

Вы можете изменить текущие политики выполнения с помощью Set-ExecutionPolicy -cmdlet, групповой политики или параметра -ExecutionPolicy при запуске процесса powershell.exe .

Подробнее о about_Execution_Policies @ TechNet

Подписание сценария

Подписание сценария выполняется с помощью Set-AuthenticodeSignature -cmdlet и сертификата подписи кода.

#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
    
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1

Вы также можете прочитать сертификат из .pfx файла, используя:

$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"

Сценарий будет действителен до истечения срока действия cetificate. Если во время подписания используется timestamp-сервер, сценарий будет продолжать действовать после истечения срока действия сертификата. Также полезно добавить цепочку доверия для сертификата (включая полномочия root), чтобы помочь большинству компьютеров доверять сертифицированному, используемому для подписи скрипта.

Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"

Рекомендуется использовать timestamp-сервер у доверенного поставщика сертификатов, такого как Verisign, Comodo, Thawte и т. Д.

Изменение политики выполнения с помощью Set-ExecutionPolicy

Чтобы изменить политику выполнения для области по умолчанию (LocalMachine), используйте:

Set-ExecutionPolicy AllSigned

Чтобы изменить политику для определенной области, используйте:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned

Вы можете подавить подсказки, добавив переключатель -Force .

Обход политики выполнения для одного скрипта

Часто вам может потребоваться выполнить неподписанный скрипт, который не соответствует текущей политике выполнения. Легкий способ сделать это - обходить политику выполнения для этого единственного процесса. Пример:

powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1

Или вы можете использовать стенографию:

powershell -ep Bypass C:\MyUnsignedScript.ps1

Другие правила выполнения:

политика Описание
AllSigned Можно запускать только скрипты, подписанные доверенным издателем.
Bypass Нет ограничений; все сценарии Windows PowerShell могут быть запущены.
Default Обычно RemoteSigned , но управляется через ActiveDirectory
RemoteSigned Загруженные скрипты должны быть подписаны доверенным издателем, прежде чем они могут быть запущены.
Restricted Никакие сценарии не могут быть запущены. Windows PowerShell можно использовать только в интерактивном режиме.
Undefined Не Доступно
Unrestricted * Подобно bypass

Unrestricted* Caveat: если вы запускаете неподписанный скрипт, загруженный из Интернета, вам предлагается получить разрешение до его запуска.


Дополнительная информация доступна здесь .

Получить текущую политику выполнения

Получение эффективной политики выполнения для текущего сеанса:

PS> Get-ExecutionPolicy
RemoteSigned

Список всех эффективных политик выполнения для текущего сеанса:

PS> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Перечислите политику выполнения для определенной области, например. процесс:

PS> Get-ExecutionPolicy -Scope Process
Undefined

Получение подписи из подписанного скрипта

Получите информацию о сигнатуре Authenticode из подписанного скрипта с помощью Get-AuthenticodeSignature -cmdlet:

Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *

Создание самоподписанного сертификата подписи кода для тестирования

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

5.0

Начиная с PowerShell 5.0 вы можете создать самозаверяющий сертификат подписи кода, используя New-SelfSignedCertificate -cmdlet:

New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert

В более ранних версиях вы можете создать самозаверяющий сертификат, используя средство makecert.exe , обнаруженное в SDK .NET Framework и Windows SDK.

Самозаверяющемуся ceriticate будет доверять только компьютеры, установившие сертификат. Для сценариев, которые будут использоваться совместно, рекомендуется использовать сертификат из доверенного центра сертификации (внутреннего или доверенного стороннего производителя).



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow