使用 C# .NET 4.0 验证可执行文件的 Authenticode

gha*_*ndi 5 .net c# authenticode signtool

我们将可执行文件交付给客户端服务,该服务在从我们的服务器下载该可执行文件后在新进程中启动该可执行文件。

可执行文件已使用我们公司的 CodeSigning-Certificate 进行签名(验证码),现在我想验证下载的可执行文件是否使用此 CodeSigning-Certificate 进行了有效签名,以防止恶意的中间人攻击。

但目前我找不到任何关于如何在不使用“signtool.exe”(客户端不可用)的情况下验证这一点的提示。

客户端上的下载服务是一个用 C# 编写的 .NET 4.0 应用程序。所以我正在寻找一种方法来验证下载文件的验证码,并且只有在验证成功时才继续。

kap*_*siR 5

由于这个问题来自 2015 年,我假设您可以使用 .NET Standard 2.0,因此还有另一个可用选项:

您可以使用 NuGet 包Microsoft.Security.Extensions

using Microsoft.Security.Extensions;

...

using (FileStream fs = File.OpenRead(@"c:\test.exe"))
{
    FileSignatureInfo sigInfo = FileSignatureInfo.GetFromFileStream(fs);

    Console.WriteLine(sigInfo.State); // SignatureState.SignedAndTrusted
}
Run Code Online (Sandbox Code Playgroud)
重要的:

确保您添加了getfilesiginforedistwrapper.dll您平台的相应本机 dll!( getfilesiginforedist.dll)

来源:

我查看了 Microsoft 如何为 PowerShell cmdlet 执行此操作Get-AuthenticodeSignature ,并在那里找到了它

备择方案: