Проверьте, является ли данный исполняемый файл цифровой подписью и действителен? - PullRequest
12 голосов
/ 16 октября 2011

В моем приложении C# / .NET я должен проверить, имеет ли данный исполняемый файл цифровую подпись (желательно без проверки Exception.)

Затем мне нужно проверить, действителен ли его сертификат (на основе установленных корневых сертификатов) и , если содержимое файлов действительно для подписи .

В BCL так много классов, что я не знаю, с чего начать и что использовать, и все, что я нашел до сих пор, не устраняет мою путаницу ...

Я хотел бы сделать что-то вроде этого, без P/Invoke, если возможно:

bool IsSignedFile(string path);  
Cert GetCertificateFromSignedFile(string path);
bool IsValidCertificate(Cert cert)
Sig GetSignatureFromSignedFile(string path);
bool IsValidSignature(string path, Sig sig, Cert cert);  

Добавлено уточнение:

Большая проблемаВ настоящее время у меня есть то, что я не нахожу способ получить подпись такого файла простым способом.Все еще надеюсь, что есть предоставленное управляемое решение BCL, так как я был бы удивлен, если именно эта часть отсутствует. (Для сертификата это может быть сделано только с помощью X509Certificate.CreateFromSignedFile, проверка также возможна)
Я бы предпочел не смешивать эти 50% выполненной работыс кодом P/Invoke или большой другой библиотекой.

Я обнаружил класс AuthenticodeSignatureInformation, однако никакой информации об использовании этого для данного исполняемого файла.

Ответы [ 2 ]

8 голосов
/ 16 октября 2011

Вы можете сделать это, используя только управляемый код.Моно-проект имеет свои собственные знак и chktrust инструменты, которые позволяют подписывать и проверять подписи Authenticode (tm).

Оба используют сборку Mono.Security.dll , которая отлично работает под Windows, и весь код лицензирован под лицензией MIT.X11 (так что вы можете в значительной степени делать то, что вы хотите с ней).

Однако вам понадобится немного дополнительной логики для проверки корневого сертификата, поскольку Mono использует собственные хранилища, а не Windows.Это не должно быть большой проблемой, поскольку .NET (начиная с версии 2) предоставляет классы, которые запрашивают / обращаются к хранилищам сертификатов пользователя / компьютера.

Отказ от ответственности: Я написал большую часть кодавыше; -)

4 голосов
/ 16 октября 2011

Определение наличия у файла действительной цифровой подписи с использованием PInvoke на случай, если вы не найдете управляемого решения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...