Get-authenticodesignature始终显示NotSigned

时间:2012-10-06 11:45:41

标签: powershell digital-signature

如果我在命令中使用sigverif,那么为什提示。

sigverif输出

    File                      Modified       Version             Status              Catalog              Signed By
------------------      ------------   -----------        ------------        -----------          -------------------
[c:\windows\system32]
batt.dll                 7/14/2009      2:6.1               Signed              nt5.cat             Microsoft Windows

PowerShell输出:

    PS> get-authenticodesignature C:\Windows\System32\batt.dll    

    Directory: C:\Windows\System32    

SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          NotSigned                              batt.dll

3 个答案:

答案 0 :(得分:2)

Microsoft已制定一项计划,以确保设备驱动程序可靠且不太可能导致计算机出现问题。当Microsoft开发人员和第三方供应商创建新驱动程序时,可以将其提交给Microsoft内部的特殊部门进行“设备签名”。签名存储在驱动程序包中的cat文件中,sigverify.exe检查。有关更多说明,请参阅Driver Signing Requirements for Windows

get-authenticodesignature用于检测其他可执行签名,即.EXE,.DLL或.PS1。就PowerShell而言,您可以使用Set-AuthenticodeSignature对代码进行签名。对于.DLL和.EXE(无论它们是本机的还是托管的),您可以使用SDK或DDK中的signtool.exe。结果可以显示在文件的属性中:

enter image description here

它存在另一种签名,仅保留给托管代码。它被称为强名。它用于为程序集赋予身份。使用强名称对程序集进行签名可以验证它的唯一性,并允许将其存储在全局程序集缓存中,使用sn.exe完成。它可以与前一个结合起来。

答案 1 :(得分:1)

sigverif用于查找未签名的驱动程序并验证设备驱动程序(在C:\ WINDOWS \ SYSTEM32 \ DRIVERS下)。当你打开Dll的属性页面时,你看到了“数字签名”标签吗?

答案 2 :(得分:1)

普通文件可以通过以下两种方式之一进行签名:嵌入式签名或目录签名。有关这两种方法的详细信息,请参见this document的第12页。

Get-AuthenticodeSignature适用于具有嵌入式签名的文件;但它将目录签名文件报告为未签名。对PowerShell团队来说这已经reported as a bug了,但显然还没有得到足够的赞成来引起他们的注意。

作为一种解决方法,您可以使用正确处理目录签名文件的Sysinternals Sigcheck。在this github code中有一个名为Use-Sigcheck的Powershell函数,它可能会派上用场。