如何通过PowerShell读取文件签名所用的全部证书?
如何通过PowerShell读取文件签名所用的全部证书?
我之前刚好碰到过这个需求,默认的PowerShell命令确实只能提取文件签名里的第一份证书,要拿到所有关联的证书得用点不一样的方法。我整理了一个实用的脚本方案,你可以直接参考使用:
function Get-AllSignedCertificates { param( [Parameter(Mandatory=$true)] [string]$FilePath ) # 获取文件的Authenticode签名信息 $signature = Get-AuthenticodeSignature -FilePath $FilePath # 先检查签名是否有效 if ($signature.Status -ne 'Valid') { Write-Warning "警告:文件签名无效或未签名,请检查文件路径或文件本身:$FilePath" return } # 从签名的SignerInfo中提取所有关联证书 $allCertificates = $signature.SignerInfo.Certificates if ($allCertificates.Count -eq 0) { Write-Output "提示:该文件的签名未包含可提取的证书信息" return } # 以结构化格式输出证书关键信息 foreach ($cert in $allCertificates) { [PSCustomObject]@{ 证书主题 = $cert.Subject 证书颁发者 = $cert.Issuer 有效期起始日期 = $cert.NotBefore 有效期结束日期 = $cert.NotAfter 证书SHA1指纹 = $cert.Thumbprint } } } # 调用示例(替换为你的文件路径): # Get-AllSignedCertificates -FilePath "C:\Example\YourSignedFile.exe"
简单说明:
- 这个自定义函数
Get-AllSignedCertificates会先验证目标文件的签名有效性,避免处理无效或未签名的文件; - 核心逻辑是从签名的
SignerInfo属性中提取全部关联证书,这是默认命令不会直接暴露的深层属性; - 最终输出的是结构化的证书信息,方便你查看或进一步处理这些证书数据。
如果你的场景需要更细粒度的证书属性,可以直接在[PSCustomObject]里添加对应的$cert属性(比如$cert.SerialNumber序列号等)。
备注:内容来源于stack exchange,提问作者Carsten
相关产品推荐
相关产品推荐

