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


Set-AuthenticodeSignature

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

Синтаксис

ByPath (По умолчанию)

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

ByLiteralPath

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

ByContent

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

Описание

Командлет Set-AuthenticodeSignature добавляет подпись Authenticode в любой файл, поддерживающий Subject Interface Package (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.

Вторая команда определяет переменную $signingParameters в виде HashTable с параметрами командлета Set-AuthenticodeSignature для подписывания скрипта PSTestInternet2.ps1. Он использует параметр FilePath, чтобы указать имя скрипта, параметр сертификата, чтобы указать, что сертификат хранится в переменной $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.

Вторая команда определяет переменную $signingParameters в виде HashTable с параметрами командлета Set-AuthenticodeSignature для подписывания скрипта ServerProps.ps1. Он использует параметр FilePath, чтобы указать имя скрипта, параметр сертификата, чтобы указать, что сертификат хранится в переменной $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

Команда использует параметр FilePath, чтобы указать подписанный скрипт и параметр сертификата, чтобы указать сертификат, сохраненный в переменной $cert. Он использует параметр IncludeChain для включения всех подписей в цепочку доверия, включая корневой удостоверяющий центр. Он также использует параметр TimeStampServer для добавления метки времени в подпись. Это предотвращает сбой скрипта при истечении срока действия сертификата.

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

Параметры

-Certificate

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

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

Свойства параметров

Тип:X509Certificate2
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Confirm

Запрашивает подтверждение перед запуском cmdlet.

Свойства параметров

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:cf

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Content

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

Свойства параметров

Тип:

Byte[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByContent
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-FilePath

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

Свойства параметров

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByPath
Position:1
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-Force

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

Свойства параметров

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-HashAlgorithm

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

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

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

Свойства параметров

Тип:String
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-IncludeChain

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

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

  • Signer: включает только сертификат подписи.
  • NotRoot. Включает все сертификаты в цепочке сертификатов, за исключением корневого центра.
  • All. Включает все сертификаты в цепочке сертификатов.

Свойства параметров

Тип:String
Default value:NotRoot
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-LiteralPath

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

Свойства параметров

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:PSPath

Наборы параметров

ByLiteralPath
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-SourcePathOrExtension

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

Свойства параметров

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByContent
Position:Named
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-TimestampServer

Использует указанный сервер меток времени для добавления метки времени в сигнатуру. Введите URL-адрес сервера меток времени в виде строки. URL-адрес должен начинаться с http://.

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

Свойства параметров

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-WhatIf

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

Свойства параметров

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:wi

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

String

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

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

Signature

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