用c# . net 4.0验证可执行文件的Authenticode

本文关键字:可执行文件 Authenticode 验证 net | 更新日期: 2023-09-27 18:06:56

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

可执行文件是用我公司的codesign - certificate签名的(authenticode),现在我想验证下载的可执行文件是用这个codesign - certificate有效签名的,以防止恶意的中间人攻击。

但目前我找不到任何提示如何验证这没有使用"signtool.exe"(这是不可用的客户端)。

客户端的下载服务是一个用c#编写的。net 4.0应用程序。所以我正在寻找一种方法,验证下载文件的authenticode,只有验证成功,才能继续。

用c# . net 4.0验证可执行文件的Authenticode

既然这个问题是从2015年开始的,我假设你可以使用。net标准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
}
重要:

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

来源:

我已经看了一下微软是如何为PowerShell cmdlet Get-AuthenticodeSignature这样做的,并在那里找到了

的替代品:

  • 本地WinVerifyTrust() api(有其他可用的答案涵盖:https://stackoverflow.com/a/6597017)