2009-03-27 4 views
8

Sto utilizzando CAPICOM in un'app .NET 3.0 C# per controllare una firma Authenticode su un file exe. Devo assicurarmi che il certificato sia elencato come editore attendibile. L'utilizzo di signedCode.Verify(true) mostrerà una finestra di dialogo se il certificato non è già affidabile, quindi l'utente può scegliere se farlo o no. Tuttavia, signedCode.Verify(false) sta verificando la firma anche se non proviene da un editore attendibile - presumibilmente questo è solo il controllo che il certificato è valido.CAPICOM - Verifica SignedCode proviene da un editore attendibile senza interfaccia utente

Come posso verificare che la firma su un file provenga da un certificato valido e attendibile senza l'interfaccia utente?

risposta

0

Che si sarebbe probabilmente bisogno di fare è quello di utilizzare esposto attraverso la funzione mscoree.dll StrongNameSignatureVerificationEx con P/Invoke:

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

In primo luogo, StrongNameSignatureVerificationEx è per la verifica della firma il montaggio e non Authenticode verifica della firma. Quindi, questo non è rilevante per il contesto della domanda del poster originale.

Per quanto riguarda la domanda iniziale, è possibile verificare manualmente che il certificato del firmatario sia correttamente incatenato da una fonte attendibile, senza alcuna interfaccia grafica utilizzando il seguente codice:

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

L'idea è quella di recuperare il certificato del firmatario e dire a CAPICom di verificare se ha una catena di fiducia corretta.

Spero che questo possa essere d'aiuto. Cheers,

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

0

È possibile utilizzare WinVerifyTrust come mostrato here. Funziona magnificamente su Windows XP/Vista/2008/7. Se si desidera controllare anche l'elenco di revoche impostato

RevocationChecks = WinTrustDataRevocationChecks.WholeChain;