Что происходит с exe, когда мы его подписываем?

После подписания exe с помощью VeriSign, если щелкнуть правой кнопкой мыши на exe, мы увидим вкладку «цифровая подпись», которая дает информацию о сертификате. Где именно эта информация будет храниться? Я имею в виду, как операционная система узнает, какой сертификат связан с каким файлом? Есть ли что-нибудь встраиваемое в exe во время подписи? Как я могу написать код С# для извлечения сертификата из подписанного exe?

Любая помощь приветствуется.

Обновление: я решил проблему, хотя мне не удалось найти, как именно хранится связь сертификата со сборкой. Мы можем создать объект X509Certificate, передав путь сборки. Моей задачей было просто получить серийный номер и владельца. Следующий код, который я написал для этого.

 X509Certificate cert = X509Certificate.CreateFromSignedFile("Solo4Orchestra.exe");
            MessageBox.Show(cert.Subject.Split(new char[1]{','})[3].Replace("O=",""));
            MessageBox.Show(cert.GetSerialNumberString());

Спасибо. Аки


person Ashif Nataliya    schedule 27.09.2010    source источник


Ответы (2)


Формат переносимой исполняемой подписи Windows Authenticode может дать вам некоторую информацию о двоичном формате.

Существует Windows API для проверки подписи, CryptQueryObject(). Возможно, для этого также существует .NET API, но, по-видимому, нет: связанная статья MSDN с примером кода для получения списка отзыва также использует вызовы Windows API, как кажется: Как получить информацию из списка отзыва сертификатов (.NET) (может быть хорошей отправной точкой, поскольку он реализует оболочку для этой функции).

person Arc    schedule 27.09.2010

Как упоминалось выше, это формат подписи Authenticode. Насколько я знаю, только наши компоненты PKIBlackbox поддерживают Authenticode (оба подписание и проверка) в .NET.

person Eugene Mayevski 'Callback    schedule 27.09.2010
comment
Бесплатная альтернатива, конечно, заключалась бы в создании оболочки для Windows API. - person Arc; 27.09.2010
comment
@Archimedix Конечно, можно использовать P/Invoke, однако основная задача состоит не в том, чтобы проверить подпись, а в том, чтобы правильно проверить сертификат. Проверка сертификата — очень сложная процедура (она включает проверку списков отзыва сертификатов, серверов OCSP, проверку вторичных цепочек сертификатов и т. д.). И нет доступного клиента OCSP для .NET (кроме нашего PKIBlackbox). - person Eugene Mayevski 'Callback; 27.09.2010