用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,只有验证成功,才能继续。
既然这个问题是从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)