PowerShell 脚本如何签名

本文介绍了如何在PowerShell中使用PFX证书对脚本文件进行签名,包括获取数字证书、导入证书、设置签名以及验证签名的方法。同时强调了签名后文件内容不可更改的重要性。
摘要由CSDN通过智能技术生成

TD;DR

$pfxPath = "C:\\Users\\frend\\Desktop\\xxxx_codesign_2022.pfx"
$pfxPassword = ConvertTo-SecureString -String "xxx" -AsPlainText -Force
$cert = Import-PfxCertificate -FilePath $pfxPath -CertStoreLocation Cert:\\CurrentUser\\My -Password $pfxPassword
Set-AuthenticodeSignature -FilePath "C:\\Users\\frend\\Desktop\\test.ps1" -Certificate $cert -TimestampServer "<http://timestamp.digicert.com>"

$pfxPath$pfxPassword脚本路径修改即可。

背景

由于 powershell 的强大逐渐被人熟知,PS 脚本的使用越来越多。杀软对脚本也青睐有加,所以我们急需对脚本文件进行签名。

脚本文件的签名跟二进制有些许的不一样,如果直接通过 signtool 进行签名,signtool 会提示成功,但实际一点用都没有。

通过内置 cmdlet 来签名

获取数字证书

我们首先要做的就是获取数字证书。数字证书可以来自自签名的,也可以来自证书颁发机构。

我们以证书颁发机构为例:

$pfxPath = "C:\\Users\\frend\\Desktop\\xxxx_codesign_2022.pfx"
$pfxPassword = ConvertTo-SecureString -String "xxx" -AsPlainText -Force
$cert = Import-PfxCertificate -FilePath $pfxPath -CertStoreLocation Cert:\\CurrentUser\\My -Password $pfxPassword

从本地的 pfx 文件中获取证书,并导入本机。

💡 如果需要采取自签名,可以通过 New-SelfSignedCertificate 来生成,但自签名别的机器默认情况是不认识的。

对脚本签名

一行命令即可:

Set-AuthenticodeSignature -FilePath "C:\\Users\\frend\\Desktop\\test.ps1" -Certificate $cert -TimestampServer "<http://timestamp.digicert.com>"

💡 这里最好是加上时间戳,这样有效期就不会因为证书过期而过期了

怎么验证是否签名

方式一

也可以采用内置 cmdlet (get-authenticodeSignature)来获取签名信息:

frend in ~ λ get-authenticodeSignature C:\\Users\\frend\\Desktop\\test.ps1

    Directory: C:\\Users\\frend\\Desktop

SignerCertificate                         Status                    StatusMessage             Path
-----------------                         ------                    -------------             ----
819BB2E453C15BA5F6FD16B86F37334BE6A7F611  Valid                     Signature verified.       test.ps1

方式二:

可以像看二进制一样查看文件属性(文件右击 → 属性 → 数字签名):

方式三:

用记事本打开 ps1 文件的时候,可以看到签名块:

注意

签名之后,文件内容是不能被更改的,如果内容更改了,签名状态就会变成 HashMismatch

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值