如何判断 .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."
}
但这仅说明一种可能性,据我了解还有许多其他可能的发行人。有没有更好的方法来判断,而不必列出所有可能的发行人?
很难找到这方面的信息,但从 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。