You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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"

简单说明:

  1. 这个自定义函数Get-AllSignedCertificates会先验证目标文件的签名有效性,避免处理无效或未签名的文件;
  2. 核心逻辑是从签名的SignerInfo属性中提取全部关联证书,这是默认命令不会直接暴露的深层属性;
  3. 最终输出的是结构化的证书信息,方便你查看或进一步处理这些证书数据。

如果你的场景需要更细粒度的证书属性,可以直接在[PSCustomObject]里添加对应的$cert属性(比如$cert.SerialNumber序列号等)。

备注:内容来源于stack exchange,提问作者Carsten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:48:09