【问题标题】:UnknownError when signing powershell script via Set-AuthenticodeSignature通过 Set-AuthenticodeSignature 签署 powershell 脚本时出现 UnknownError
【发布时间】:2022-04-07 01:24:53
【问题描述】:

我已从我们受信任的 CA 获得代码签名证书。我正在尝试在 PowerShell ISE 中签署脚本,但收到“UnknownError”。我已经尝试将脚本编码为 UTF-8,但我仍然遇到同样的错误。我已经验证了脚本也是 UTF-8。

$cert=(dir cert:currentuser\my\ -CodeSigningCert)
Set-AuthenticodeSignature C:\Scripts\Certtestnew.ps1 $cert

即使我收到“UnknownError”,它似乎仍然签署了脚本。虽然,当我运行脚本时,我收到“文件 C:\Scripts\Certtestnew.ps1 的内容可能已被篡改,因为 文件与数字签名中存储的哈希不匹配。”

更新 $cert 信息:

PSPath : Microsoft.PowerShell.Security\Certificate::currentuser\my\FDCD31216C3491C2809441344EE6EF5E01EB0550
PSParentPath : Microsoft.PowerShell.Security\Certificate::currentuser\my
PSChildName : FDCD31216C3491C2809441344EE6EF5E01EB0550
PSDrive : Cert
PSProvider : Microsoft.PowerShell.Security\Certificate
PSIsContainer : False
EnhancedKeyUsageList : {}
DnsNameList : {}
SendAsTrustedIssuer : False
Archived : False
Extensions : {System.Security.Cryptography.Oid,System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid...;}
FriendlyName :
IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
 NotAfter : 10/29/2016 4:05:37 PM
NotBefore : 10/29/2015 3:45:37 PM
HasPrivateKey : True
PrivateKey :
PublicKey : System.Security.Cryptography.X509Certificates.PublicKey
RawData : {48, 130, 5, 225...;}
SerialNumber : 60A14A915A0FAFA12311B0998F5892C9
SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm : System.Security.Cryptography.Oid
Thumbprint : FDCD31216C3491C2809441344EE6EF5E01EB0550
Version : 3
Handle : 578311520
Issuer : CN=USER OU=Admin, OU=Admin and Service Accounts, DC=domoain
Subject : CN=USER, OU=Admin, OU=Admin and Service Accounts, DC=domain

【问题讨论】:

  • $cert 变量是否返回正确的证书?
  • @bentek 是的。但是,当我输入 $cert.privatekey 时,什么都没有显示。
  • 您是如何重新编码并验证脚本是 UTF8 的?
  • 已尝试:“C:\Scripts\Certtestnew.ps1”|输出文件 "C:\SCripts\Certtestnew2.ps1" -encoding utf8 并尝试:$psISE.CurrentFile.Save([Text.Encoding]::UTF8)。通过在 Notepad++ 中打开验证文件是 UTF-8。
  • 在发行人行中,DC=domoain -- 这是一个错字吗?

标签: powershell certificate powershell-3.0


【解决方案1】:

我刚刚查看了我的域代码签名证书,它的PrivateKey 属性以及Code Signing 在其EnhancedKeyUsageList 属性下列出:

PSPath                   : Microsoft.PowerShell.Security\Certificate::CurrentUser\My\XXX
PSParentPath             : Microsoft.PowerShell.Security\Certificate::CurrentUser\My
PSChildName              : XXX
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.Security\Certificate
PSIsContainer            : False
EnhancedKeyUsageList     : {Code Signing (1.3.6.1.5.5.7.3.3)}
DnsNameList              : {XXX}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
                           System.Security.Cryptography.Oid...}
FriendlyName             : XXX
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : XXX
NotBefore                : XXX
HasPrivateKey            : True
PrivateKey               : System.Security.Cryptography.RSACryptoServiceProvider
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : XXX
SerialNumber             : XXX
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm       : System.Security.Cryptography.Oid
Thumbprint               : XXX
Version                  : 3
Handle                   : XXX
Issuer                   : XXX
Subject                  : XXX

这导致我询问您的证书是否对代码签名有效。您可能需要重新访问您的证书请求并确保。

$error 跌倒后包含什么?

【讨论】:

  • 我知道的老问题,但我目前遇到了同样的问题,$error 什么也没说
【解决方案2】:

对于我的 PowerShell 脚本,运行 Set-AuthenticodeSignature 后出现此错误“UnknownError”最终是我忘记在 Windows 10 HomeAdministrator mode 中启动 PowerShell。作为“普通”用户,脚本无法应用数字签名。我正在向我的脚本添加对用户名/类型的检查。 June Castillote does a great job explaining how to set up Digital Signatures for Windows PowerShell scripts *.ps1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2016-02-07
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多