Поделиться через


Set-AuthenticodeSignature

Добавляет подпись Authenticode в скрипт PowerShell или другой файл.

Синтаксис

Set-AuthenticodeSignature
   [-Certificate] <X509Certificate2>
   [-IncludeChain <String>]
   [-TimestampServer <String>]
   [-HashAlgorithm <String>]
   [-Force]
   [-FilePath] <String[]>
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-AuthenticodeSignature
   [-Certificate] <X509Certificate2>
   [-IncludeChain <String>]
   [-TimestampServer <String>]
   [-HashAlgorithm <String>]
   [-Force]
   -LiteralPath <String[]>
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-AuthenticodeSignature
   [-Certificate] <X509Certificate2>
   [-IncludeChain <String>]
   [-TimestampServer <String>]
   [-HashAlgorithm <String>]
   [-Force]
   -SourcePathOrExtension <String[]>
   -Content <Byte[]>
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Описание

Командлет Set-AuthenticodeSignature добавляет подпись Authenticode в любой файл, поддерживающий пакет интерфейса субъекта (SIP).

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

Примеры

Пример 1. Подписыв скрипт с помощью сертификата из локального хранилища сертификатов

Эти команды извлекают сертификат подписывания кода из поставщика сертификатов PowerShell и используют его для подписи скрипта PowerShell.

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
    FilePath      = 'PsTestInternet2.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

Первая команда использует Get-ChildItem командлет и поставщик сертификатов PowerShell для получения сертификатов в Cert:\CurrentUser\My подкаталоге хранилища сертификатов. Диск Cert: представляет собой диск, предоставляемый поставщиком сертификатов. Параметр CodeSigningCert , который поддерживается только поставщиком сертификатов, ограничивает сертификаты, полученные с помощью центра подписи кода. Команда сохраняет результат в переменной $cert .

Вторая команда определяет переменную как хэш-файл с параметрами командлета для Set-AuthenticodeSignature подписывания скриптаPSTestInternet2.ps1.$signingParameters Он использует параметр FilePath для указания имени скрипта, параметра Certificate, чтобы указать, что сертификат хранится в $cert переменной, а параметр HashAlgorithm — для задания алгоритма хэширования значение SHA256.

Третья команда подписывает скрипт путем покрепки параметров, определенных в $signingParameters.

Примечание.

Использование параметра CodeSigningCert только Get-ChildItem возвращает сертификаты, имеющие центр подписи кода и содержащие закрытый ключ. Если закрытый ключ отсутствует, сертификаты нельзя использовать для подписывания.

Пример 2. Подписыв скрипт с помощью сертификата из PFX-файла

Эти команды используют Get-PfxCertificate командлет для загрузки сертификата подписи кода. Затем используйте его для подписывания скрипта PowerShell.

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
    FilePath      = 'ServerProps.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

Первая команда использует Get-PfxCertificate командлет для загрузки сертификата C:\Test\MySign.pfx в $cert переменную.

Вторая команда определяет переменную как хэш-файл с параметрами командлета для Set-AuthenticodeSignature подписывания скриптаServerProps.ps1.$signingParameters Он использует параметр FilePath для указания имени скрипта, параметра Certificate, чтобы указать, что сертификат хранится в $cert переменной, а параметр HashAlgorithm — для задания алгоритма хэширования значение SHA256.

Третья команда подписывает скрипт путем покрепки параметров, определенных в $signingParameters.

Если файл сертификата защищен паролем, PowerShell запрашивает пароль.

Пример 3. Добавление подписи, включающей корневой центр

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

$signingParameters = @{
    FilePath      = 'C:\scripts\Remodel.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
    IncludeChain  = 'All'
    TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters

Первая команда определяет $signingParameters переменную как хэш-файл с параметрами командлета Set-AuthenticodeSignature для подписывания скрипта. Он использует параметр FilePath для указания пути к скрипту, параметра Certificate, чтобы указать, что сертификат хранится в $cert переменной, и параметр HashAlgorithm для задания алгоритма хэширования значение SHA256. Он использует параметр IncludeChain для включения всех подписей в цепочку доверия, включая корневой центр. Он также использует параметр TimeStampServer для добавления метки времени в сигнатуру. Это защищает скрипт от сбоя, если срок действия сертификата истек.

Вторая команда подписывает скрипт, различая параметры, определенные в $signingParameters.

Параметры

-Certificate

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

Чтобы найти сертификат, используйте или используйте Get-PfxCertificate Get-ChildItem командлет на диске сертификата Cert: . Если сертификат недопустим или не имеет code-signing центра, команда завершается ошибкой.

Тип:X509Certificate2
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Confirm

Запрос подтверждения перед выполнением командлета.

Тип:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Content

Этот параметр отображается в описании синтаксиса, так как он определен в базовом классе, Set-AuthenticodeSignature производным от него. Однако поддержка этого параметра не реализована Set-AuthenticodeSignature.

Тип:Byte[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-FilePath

Указывает путь к подписываемому файлу.

Тип:String[]
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Force

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

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-HashAlgorithm

Задает алгоритм хэширования, который использует Windows для расчета цифровой подписи для файла.

Значение по умолчанию - SHA1. Файлы, подписанные с использованием другого алгоритма хэширования, могут не распознаваться в других системах. Какие алгоритмы поддерживаются, зависят от версии операционной системы.

Список возможных значений см. в разделе HashAlgorithmName Struct.

Тип:String
Position:Named
Default value:Null
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-IncludeChain

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

Допустимые значения:

  • Подписыватель: включает только сертификат подписи.
  • NotRoot: включает все сертификаты в цепочке сертификатов, за исключением корневого центра.
  • Все: включает все сертификаты в цепочке сертификатов.
Тип:String
Position:Named
Default value:NotRoot
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LiteralPath

Указывает путь к подписываемому файлу. В отличие от FilePath, значение параметра LiteralPath используется точно так же, как и типизированный параметр. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности.

Тип:String[]
Aliases:PSPath
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-SourcePathOrExtension

Этот параметр отображается в описании синтаксиса, так как он определен в базовом классе, Set-AuthenticodeSignature производным от него. Однако поддержка этого параметра не реализована Set-AuthenticodeSignature.

Тип:String[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-TimestampServer

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

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

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-WhatIf

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

Тип:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

String

Можно передать строку, содержащую путь к файлу для этого командлета.

Выходные данные

Signature

Этот командлет возвращает объект Signature , представляющий заданное значение.