Проверьте Authenticode для execuable с C# .NET 4.0
Мы доставляем исполняемый файл клиентскому сервису, который запускает этот исполняемый файл в новом процессе после его загрузки с наших серверов.
Исполняемый файл подписан (authenticode) с помощью CodeSigning-Certificate нашей компании, и теперь я хотел бы убедиться, что загруженный исполняемый файл правильно подписан этим CodeSigning-Certificate для предотвращения злонамеренных атак типа "человек посередине".
Но в настоящее время я не могу найти какие-либо подсказки о том, как проверить это без использования "signtool.exe" (который недоступен на клиенте).
Download-Service на клиенте - это приложение.NET 4.0, написанное на C#. Поэтому я ищу способ проверить подлинность загруженного файла и продолжить, только если проверка прошла успешно.
1 ответ
Поскольку этот вопрос относится к 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
}
Важный:
Убедитесь, что вы добавляетеgetfilesiginforedistwrapper.dll
и соответствующую нативную dll вашей платформы! (getfilesiginforedist.dll
)
Источник:
Я посмотрел, как Microsoft делает это для командлета PowerShell.Get-AuthenticodeSignature
и нашел его там
Альтернативы:
- Собственный API WinVerifyTrust() (есть и другие доступные ответы, которые охватывают это: /questions/17261305/kak-proverit-podpisan-li-fajl-v-c/17261317#17261317)