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


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>]

Описание

Этот командлет доступен только на платформе Windows.

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

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

Примеры

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

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

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert

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

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

Примечание

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

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

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

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert

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

Вторая команда использует для Set-AuthenticodeSignature подписи скрипта. Параметр Set-AuthenticodeSignatureFilePath указывает путь к подписанному файлу скрипта, а параметр Cert передает $cert переменную, содержащую сертификат, в Set-AuthenticodeSignature.

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

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

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

Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "https://timestamp.fabrikam.com/scripts/timstamper.dll"

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

Параметры

-Certificate

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

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

Type:X509Certificate2
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

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

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Content

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

Type:Byte[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-FilePath

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

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HashAlgorithm

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

Для PowerShell 7.3 по умолчанию используется SHA256, который является алгоритмом хэширования Windows по умолчанию. В более ранних версиях по умолчанию используется SHA1. Файлы, подписанные с использованием другого алгоритма хэширования, могут не распознаваться в других системах. Поддерживаемые алгоритмы зависят от версии операционной системы.

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

Type:String
Position:Named
Default value:SHA256
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeChain

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

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

  • Подписыватель: включает только сертификат подписывателя.
  • NotRoot: включает все сертификаты в цепочке сертификатов, за исключением корневого центра.
  • Все. Включает все сертификаты в цепочке сертификатов.
Type:String
Position:Named
Default value:NotRoot
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

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

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SourcePathOrExtension

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

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-TimestampServer

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

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

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

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

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

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

String

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

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

Signature

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

Примечания

Этот командлет доступен только на платформах Windows.