如何使用PowerShell脚本进行数字签名?

发布时间:2022/11/14 14:04:01 打印 字号:

digitally-sign-powershell-script.png

如何对PowerShell脚本进行数字签名以进行身份验证和保护的快速指南

您是否希望确保您的脚本可以安全使用并且没有被篡改,从而伤害用户?如果是这种情况,那么您将需要使用由已知证书颁发机构(如Sectigo、DigiCert)提供的代码签名证书对PowerShell脚本进行数字签名。

一旦您对PowerShell脚本进行了数字签名,它就会通过嵌入您的独特数字签名来显示您的身份,该数字签名会向用户传达一条消息,即真正的软件开发公司已经开发了它并且对用户来说是安全的。

在本快速指南中,我们将引导您完成详细步骤,展示如何对PowerShell脚本进行数字签名,使其显示为可在计算机环境中顺利运行的受信任脚本,同时防止出现安全问题和警告。

但在我们开始之前,让我们看看您应该注意哪些先决条件。


对PowerShell脚本进行数字签名之前应了解的先决条件

一旦使用精心编写的Shell脚本将补丁管理任务置于自动驾驶仪上,您现在应该专注于保持这些脚本的安全并防止任何将恶意恶意软件加载到用户设备上的篡改。为此,您需要对PowerShell脚本进行数字签名。同样,为此,您需要确保:

  • 运行Windows操作系统8.1及更高版本的设备

  • WindowsPowerShell脚本版本5.1及更高版本

  • PowerShell脚本保存在您创建的任何文件夹中

获得此处提到的所有内容后,您现在可以继续使用代码设计PowerShell脚本。


使用PowerShell数字签名编写脚本的步骤

1.从受信任的证书颁发机构购买代码签名证书

首先,您需要从DigiCert或Sectigo等全球受信任的证书颁发机构购买负担得起的代码签名证书。它使您能够保护您的软件、脚本和其他可执行文件免受未经授权的访问和第三方修改。它降低了篡改的风险,并向您的用户和系统管理员保证脚本是安全的并且来自您。

如果您已经购买了标准或EV(扩展验证)代码签名证书,则可以跳过此步骤。但是,如果您还没有,请先确保根据您的要求购买软件签名证书,然后再继续。

此外,请确保避免使用自签名代码签名证书,因为系统不信任它。自签名代码签名证书会产生警告,并且很有可能被篡改。换句话说,自签名的Shell脚本将被视为未签名的Shell脚本,没有人会信任它们。

购买并颁发代码签名证书后,您可以继续下一步。


2.以管理员身份打开WindowsPowerShell

您需要以管理员权限运行PowerShell才能对PowerShell脚本进行数字签名。而且,为了打开它:

windows-powershell.png

  • 窗口电源外壳

  • 点击开始按钮

  • 在搜索框中,键入PowerShell

  • 选择应用程序PowerShell

  • 右键单击PowerShell并选择选项以管理员身份运行

3.查看并选择您的代码签名证书

如果您有多个代码签名证书,请确保您从列表中选择了正确的代码签名证书。为此,您需要遵循以下命令:

Get-ChildItem Cert:\ExampleUser\MyFolder -CodeSigningCert

查看代码签名证书列表

但是,如果您想安全起见并想查看所有可用的代码签名证书,则可以使用以下两种方法:

目录更改方法

输入命令并转到存储代码签名证书的文件夹:

cd Cert\ExampleUser\MyFolder
Type ls and press Enter

使用powershell更改目录

命令方法

输入这个提到的命令:

Get-ChildItem Cert:\ExampleUser\MyFolder
Hit enter

获取所有证书的列表

笔记:

如果您的代码签名证书保存在另一个文件夹中,请确保在文件路径Cert:\ExampleUser\MyFolder中将其替换为实际正确的证书。这是一个相同的例子:

Cert:\ ExampleUser\MyFolder -CodeSigningCert [0] or Cert:\LocalMachine\MyFolder -CodeSigningCert [2]

点击Enter按钮后,您的代码签名证书将出现在PowerShell的Windows上。这是一个相同的示例,显示了系统中的所有代码签名证书:

获得代码签名证书列表后,您可以选择所需的证书并进一步对PowerShell脚本进行数字签名。然后您需要将代码签名证书设置为$cert等变量。接下来,您需要遵循从列表中选择特定软件签名证书的特定命令。下面是一个选择您想要的代码签名证书的命令。(它从顶部开始,您可以算作0)。这是命令:
$cert = (Get-ChildItem –Path Cert:\LocalMachine\MyFolder -CodeSigningCert)[4]

4.数字签名PowerShell脚本

选择代码签名证书后,您可以将其保存到$cert变量并开始签名。要对PowerShell脚本进行数字签名,可以使用Set-AuthenticodeSignature命令,例如:

Set-AuthenticodeSignature -FilePath SCRIPT_PATH -Certificate $cert

用于PowerShell代码签名的cmdlet

笔记:

通过替换SCRIPT_PATH使用实际路径

例如,对PowerShell脚本进行数字签名的命令如下所示:

Set-AuthenticodeSignature -FilePath C:\MyCodeSigningCert\eg_powershell_script.ps1 -Certificate $cert

同样,建议您为PowerShell签名脚本添加时间戳,这样一旦您的代码签名证书过期并且您的数字签名永远有效,您的用户就不会面临任何警告。并且,要为您的数字签名PowerShell脚本添加时间戳,您可以使用以下命令:

Set-AuthenticodeSignature -FilePath C:\EgCodeSigningCert\eg_powershell_script.ps1 -Certificate $cert -TimeStampServer http://timestamp.<certificate-authority-name>.com

笔记:

在命令中,将<certificate-authority-name>更改为您购买代码签名证书的证书颁发机构的名称。例如,Sectigo或Comodo。

5.对PowerShell脚本进行数字签名后进行验证

对PowerShell脚本进行代码签名后,建议您验证其签名是否正确。为了验证它,下面是一些方法:

通过打开已签名的PowerShell脚本

  • 使用记事本等文本编辑器,打开已签名的PowerShell脚本

  • 在脚本的底部,查找签名块。如果签名正确,它将以#SIG#开头和结尾

通过属性检查数字签名

如果您想直观地验证签名,您可以这样做。

  • 打开WindowsExplorer并转到保存已签名PowerShell脚本的文件夹。

  • 右键单击文件夹

  • 从菜单中,选择选项属性

  • 单击名为“数字签名”的选项卡

它应该如下所示:


使用PowerShell命令进行验证

另一种方法是使用PowerShell命令验证您的签名。同样,您只需输入命令,您将获得它的输出,该输出将显示它是否已签名。

  • 转到PowerShell窗口

  • 键入以下提到的命令:

Get-AuthenticodeSignature -FilePath PATH_OF_PowerShell_SCRIPT | Select-Object -Property *

验证您的powershell脚本

笔记:

  • 将PATH_OF_PowerShell_SCRIPT更改为您保存它的实际路径。

而且,如果签名正确,您将看到如下输出:


结束语

通过使用代码签名证书对PowerShell脚本进行签名,您可以向用户保证,您在其中所做的任何更改都会得到您的批准和审查。同样,它还确保PowerShell脚本没有被篡改并且可以安全使用。在这里,我们给出了以数字方式签署PowerShell脚本的详细步骤。我们希望它能让您更好地了解如何做到这一点。