2010-09-15 19 views
6

Sto firmando un exe dot net usandoCome faccio a leggere la chiave pubblica da un C# firmato exe

signcode.exe with an spc/pvk combo 

Il file ha bisogno di leggere la propria chiave pubblica in fase di esecuzione al fine di verificare alcuni dati. Ho approfondito una serie di strade diverse.

Ho provato

X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe); 

executingCert è un valore nullo. Sto indovinando che il codice d'accesso non sta creando un file firmato X509, anche se c'è un interruttore per cambiare che sono felice di andare in quel modo.

a cura scopre il lavoro di cui sopra fa .... Ho avuto il mio assegno nullo indietro (= = ==!!) :)

Assembly asm = Assembly.GetExecutingAssembly(); 
string exe = asm.Location; 
X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe); 

if (executingCert != null) 
{ 
    Console.WriteLine("Assembly is signed"); 
    byte[] assemblyKey = executingCert.GetPublicKey(); 
} 

risposta

3

SignCode (per .Net 1.0 e 1.1) utilizza la firma Authenticode, che per quanto ne so, manca un'interfaccia gestita .Net Framework. Probabilmente dovrai usare P/Invoke per chiamare le routine nell'API Win32 come quelle trovate in questo KB article: How To Get Information from Authenticode Signed Executables. Probabilmente dovrai utilizzare CryptQueryObject per ottenere il certificato , che dovrai quindi trovare un'altra routine da cui estrarre la chiave pubblica.

Dai un'occhiata a questo correlate domanda StackOverflow che ha un sacco di risposte: WinVerifyTrust to check for a specific signature?

+0

Grazie sembra che dovrebbe funzionare se riesco a tirare fuori tutto il p/invocando – Fiacc

+0

Questo ha una risposta C# http://stackoverflow.com/a/28835034/82410 – Rohit

0

provare qualcosa di simile:

Assembly.GetEntryAssembly().GetName().GetPublicKey() 

In questo caso ho utilizzato GetEntryAssembly, ma ovviamente è possibile chiamare il metodo su qualsiasi assembly caricato.

+2

che sta leggendo la chiave pubblica di un nome sicuro non di una firma digitale basata su certificati! –

Problemi correlati