2009-03-27 28 views
8

J'utilise CAPICOM dans une application .NET 3.0 C# pour vérifier une signature Authenticode sur un fichier exe. Je dois m'assurer que le certificat est répertorié en tant que Publisher approuvé. L'utilisation de signedCode.Verify(true) affichera une boîte de dialogue si le certificat n'est pas déjà approuvé, afin que l'utilisateur puisse choisir de le faire ou non. Cependant, signedCode.Verify(false) vérifie la signature même si elle ne provient pas d'un éditeur de confiance - il s'agit vraisemblablement seulement de vérifier que le certificat est valide.CAPICOM - Vérifier que SignedCode provient d'un éditeur approuvé sans interface utilisateur

Comment puis-je vérifier que la signature d'un fichier provient d'un certificat valide et fiable sans l'interface utilisateur?

Répondre

0

Qu'est-ce que vous auriez probablement besoin de faire est d'utiliser exposé à travers la mscoree.dll fonction StrongNameSignatureVerificationEx avec P/Invoke:

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

D'abord, StrongNameSignatureVerificationEx est pour la vérification de la signature de montage et non vérification de signature Authenticode. Donc, ce n'est pas pertinent dans le contexte de la question de l'affiche originale.

En ce qui concerne la question initiale, vous pouvez vérifier manuellement que le certificat du signataire est enchaînée correctement à une racine de confiance sans interface graphique en utilisant le code suivant:

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

L'idée est de récupérer le certificat du signataire et à dites à CAPICom de vérifier si la chaîne de confiance est correcte.

J'espère que cela aidera. Vive,

Mounir IDRASSI, IDRIX, http://www.idrix.fr

0

Vous pouvez utiliser WinVerifyTrust comme indiqué here. Cela fonctionne magnifiquement sur Windows XP/Vista/2008/7. Si vous voulez également vérifier l'ensemble de la liste de révocation

RevocationChecks = WinTrustDataRevocationChecks.WholeChain;