CAPICOM - Убедитесь, что SignedCode от доверенного издателя без пользовательского интерфейса - PullRequest
8 голосов
/ 27 марта 2009

Я использую CAPICOM в приложении .NET 3.0 C # для проверки подписи Authenticode в exe-файле. Мне нужно убедиться, что сертификат указан в качестве доверенного издателя. Использование signedCode.Verify(true) покажет диалоговое окно, если сертификат еще не является доверенным, поэтому пользователь может выбрать, делать это или нет. Однако signedCode.Verify(false) проверяет подпись, даже если она не от доверенного издателя - возможно, это только проверка того, что сертификат действителен.

Как я могу проверить, что подпись на файле взята из действительного и доверенного сертификата без пользовательского интерфейса?

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011

Во-первых, StrongNameSignatureVerificationEx предназначен для проверки подписи сборки, а не проверки подписи Authenticode. Таким образом, это не относится к контексту оригинального плаката.

Что касается первоначального вопроса, вы можете вручную проверить правильность цепочки сертификата подписавшего доверенного корня без графического интерфейса пользователя, используя следующий код:

ICertificateStatus certStatus = signedCode.Signer.Certificate.IsValid();

Идея состоит в том, чтобы получить сертификат подписавшего и сказать CAPICom, чтобы проверить, имеет ли он правильную цепочку доверия.

Надеюсь, это поможет. Cheers,

Мунир ИДРАССИ, ИДРИКС, http://www.idrix.fr

0 голосов
/ 05 мая 2011

Вы можете использовать WinVerifyTrust, как показано здесь . Он прекрасно работает на Windows XP / Vista / 2008/7. Если вы также хотите проверить список отзыва, установите

RevocationChecks = WinTrustDataRevocationChecks.WholeChain;
0 голосов
/ 13 апреля 2011

Что вам, вероятно, понадобится сделать, это использовать доступную через mscoree.dll функцию StrongNameSignatureVerificationEx с P / Invoke:

[DllImport("mscoree.dll", CharSet=CharSet.Unicode)]
static extern bool StrongNameSignatureVerificationEx(string wszFilePath, bool fForceVerification, ref bool  pfWasVerified);
...