PowerShell - 如何判断文件是否经过 WHQL 签名或证明签名

问题描述 投票:0回答:1

如何判断 .cat 文件是否经过证明签名或 WHQL 签名?

我从文档中知道我可以使用 Get-AuthenticodeSignature 来获取有关文件的 Authenticode 签名的信息。我也知道它可以是认证签名WHQL签名,但我不知道如何辨别它是什么。我尝试向 ChatGPT 询问这个问题,经过一番提示后,它回复了以下内容:

“查找证书信息中的颁发者和主题字段。 WHQL 签名的目录文件通常有一个与 Microsoft Windows Hardware Compatibility Publisher 或类似的受信任机构相关的颁发者。”

# Get information about the catalog file's digital signature
$catalogSignature = Get-AuthenticodeSignature -FilePath $catalogFilePath

# Check if the catalog signature indicates WHQL or Attestation signing
if ($catalogSignature.Issuer -like "*Windows Hardware Compatibility Publisher*") {
    Write-Host "The catalog file is WHQL-signed."
} else {
    Write-Host "The catalog file is Attestation-signed."
}

但这仅说明一种可能性,据我了解还有许多其他可能的发行人。有没有更好的方法来判断,而不必列出所有可能的发行人?

powershell
1个回答
0
投票

很难找到这方面的信息,但从 Clifford 的评论和我在本页IX509ExtensionEnhancedKeyUsage 接口上看到的内容来看,似乎唯一的判断方法是通过 OID。如果 OID 为 1.3.6.1.4.1.311.10.3.5 或 1.3.6.1.4.1.311.10.3.7,则它是 WHQL。如果是 1.3.6.1.4.1.311.10.3.5.1 那么它就是认证。

可以通过这样做访问该属性

$catalogSignature = Get-AuthenticodeSignature -FilePath $catalogFilePath

(如问题中提到的)然后访问变量

.SignerCertificate.Extensions
,这是一个数组。数组中的一项应为
X509EnhancedKeyUsageExtension
类型,其中包含
EnhancedKeyUsages
,即 OID 的集合。带有
FriendlyName
“Windows 硬件驱动程序验证”的 OID 是有问题的目标 OID。

© www.soinside.com 2019 - 2024. All rights reserved.