当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 设置 AuthenticodeSignature (Microsoft.PowerShell.Security)

作者:精品下载站 日期:2024-12-14 02:09:05 浏览:14 分类:玩电脑

设置 AuthenticodeSignature (Microsoft.PowerShell.Security)


Set-AuthenticodeSignature

模块 :Microsoft.PowerShell.Security

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

描述

此 cmdlet 仅适用于 Windows 平台。

Set-AuthenticodeSignature cmdlet 将 Authenticode 签名添加到支持主题接口包 (SIP) 的任何文件。

在 PowerShell 脚本文件中,签名采用文本块的形式,指示脚本中执行的指令的结尾。如果运行此 cmdlet 时文件中存在签名,则该签名将被删除。

示例

示例 1 - 使用本地证书存储中的证书对脚本进行签名

这些命令从 PowerShell 证书提供程序检索代码签名证书,并使用它来签署 PowerShell 脚本。

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

第一个命令使用 Get-ChildItem cmdlet 和 PowerShell 证书提供程序来获取证书存储的 Cert:\CurrentUser\My 子目录中的证书。 Cert: 驱动器是证书提供程序公开的驱动器。仅证书提供程序支持的 CodeSigningCert 参数将检索的证书限制为具有代码签名权限的证书。该命令将结果存储在 $cert 变量中。

第二个命令使用 Set-AuthenticodeSignature cmdlet 对 PSTestInternet2.ps1 脚本进行签名。它使用 FilePath 参数指定脚本的名称,并使用 Certificate 参数指定将证书存储在 $cert 变量中。

笔记

CodeSigningCert 参数与 Get-ChildItem 一起使用只会返回具有代码签名权限并包含私钥的证书。如果没有私钥,则无法使用证书进行签名。

示例 2 - 使用 PFX 文件中的证书对脚本进行签名

这些命令使用 Get-PfxCertificate cmdlet 加载代码签名证书。然后,使用它来签署 PowerShell 脚本。

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

第一个命令使用 Get-PfxCertificate cmdlet 将 C:\Test\MySign.pfx 证书加载到 $cert 变量中。

第二个命令使用 Set-AuthenticodeSignature 对脚本进行签名。 Set-AuthenticodeSignatureFilePath 参数指定正在签名的脚本文件的路径,Cert 参数传递 $cert 变量包含 Set-AuthenticodeSignature 的证书。

如果证书文件受密码保护,PowerShell 会提示您输入密码。

示例 3 - 添加包含 root 权限的签名

该命令添加包含信任链中的根权限的数字签名,并由第三方时间戳服务器签名。

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 或使用证书 Cert: 驱动器中的 Get-ChildItem cmdlet。如果证书无效或没有代码签名权限,则命令失败。

类型 :

X509证书2

位置:

1

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

-Confirm

在运行 cmdlet 之前提示您进行确认。

类型 :

SwitchParameter

别名:

cf

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-Content

此参数出现在语法列表中,因为它是在 Set-AuthenticodeSignature 派生自的基类中定义的。但是,Set-AuthenticodeSignature 中未实现对此参数的支持。

类型 :

字节[]

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-FilePath

指定正在签名的文件的路径。

类型 :

String[]

位置:

1

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-Force

允许 cmdlet 将签名附加到只读文件。即使使用 Force 参数,cmdlet 也无法覆盖安全限制。

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-HashAlgorithm

指定 Windows 用于计算文件数字签名的哈希算法。

对于 PowerShell 7.3,默认值为 SHA256,这是 Windows 默认哈希算法。对于早期版本,默认值为 SHA1。使用不同哈希算法签名的文件可能无法在其他系统上识别。支持哪些算法取决于操作系统的版本。

有关可能值的列表,请参阅 HashAlgorithmName 结构。

类型 :

String

位置:

命名

默认值:

SHA256

必需的:

False

接受管道输入:

False

接受通配符:

False

-IncludeChain

确定证书信任链中的哪些证书包含在数字签名中。 NotRoot 是默认值。

有效值为:

  • 签名者:仅包括签名者的证书。
  • NotRoot:包括证书链中除根颁发机构之外的所有证书。
  • 全部:包括证书链中的所有证书。
类型 :

String

位置:

命名

默认值:

NotRoot

必需的:

False

接受管道输入:

False

接受通配符:

False

-LiteralPath

指定正在签名的文件的路径。与 FilePath 不同,LiteralPath 参数的值完全按照键入的值使用。没有字符被解释为通配符。如果路径包含转义字符,请将其用单引号引起来。单引号告诉 PowerShell 不要将任何字符解释为转义序列。

类型 :

String[]

别名:

PSPath

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-SourcePathOrExtension

此参数出现在语法列表中,因为它是在 Set-AuthenticodeSignature 派生自的基类中定义的。但是,Set-AuthenticodeSignature 中未实现对此参数的支持。

类型 :

String[]

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-TimestampServer

使用指定的时间戳服务器为签名添加时间戳。以字符串形式输入时间戳服务器的 URL。 URL 必须以 https://http:// 开头。

时间戳表示证书添加到文件的确切时间。如果证书过期,时间戳可以防止脚本失败,因为用户和程序可以验证证书在签名时是否有效。

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-WhatIf

显示 cmdlet 运行时会发生什么情况。该 cmdlet 未运行。

类型 :

SwitchParameter

别名:

wi

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

输入

字符串

您可以通过管道传输包含此 cmdlet 的文件路径的字符串。

输出

签名

此 cmdlet 返回一个表示其设置的值的 Signature 对象。

笔记

此 cmdlet 仅适用于 Windows 平台。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯