2014-12-07 35 views
21

Ho un'applicazione che ha 1 assembly di riferimento (test.exe, test.dll)modo corretto di firmare digitalmente l'applicazione dopo aver fatto riferimento assemblee

Quello che voglio è quando il test.exe viene eseguito, si dovrebbero mostrare come nome dell'editore "SocietàProva".

Per farlo, l'ho firmato digitalmente e fa quello che voglio. E se modifico un byte di test.exe il nome dell'editore è "Sconosciuto". Che è buono.

Ma se modifico lo test.dll, l'app viene eseguita come se nulla fosse accaduto e mostra il nome del publisher come "TestCompany". Non va bene per me

Quindi ho inserito il nome sicuro su test.dll e aggiunto <bypassTrustedAppStrongNames enabled="false" /> in app.config.

Ancora nessuna differenza. Così ho cercato di nuovo e ho scoperto che bypassTrustedAppStrongNames controlla solo se gli assembly hanno un nome sicuro o no. Non la verifica. Non va bene per me

Quello che voglio esattamente è proteggere l'utente, non la mia applicazione. Se l'utente esegue la mia applicazione e dice che è da me, deve essere da me come ogni singolo byte. Se l'app è stata modificata, anche un singolo byte, deve informare l'utente, non è da me. Qual è il significato del segno digitale da fare con un nome forte, ma non sembrano ancora così buoni. O mi sta sfuggendo qualcosa ?

L'ultimo modo possibile a cui riesco a pensare è quello di verificare manualmente il nome sicuro dell'assemblaggio.

PS: Obiettivo .net framework 2.0 è

+0

Penso che forse dovremo eseguire Sn.exe (lo Strong Name Tool) con il parametro -vf e testare il codice di ritorno. O forse persino acquisire e analizzare l'output. – RenniePet

+0

http://msdn.microsoft.com/en-us/library/cc713694%28v=vs.110%29.aspx Esiste un'impostazione del Registro di sistema che potrebbe eseguire ciò che si desidera. – RenniePet

+0

@RenniePet: Sì, posso controllare manualmente utilizzando 'StrongNameSignatureVerificationEx', ma mi aspettavo qualcosa che si controllasse come previsto. Hanno disabilitato la verifica dal framework 3.5 per accelerare l'avvio dell'app. Ma anche disabilitare è rotto. – xmen

risposta

1

maggior parte dei miei gruppi importanti non vengono caricati come riferimento nel mio progetto. Quello che faccio è quello di dichiarare interfacce di interoperabilità (comuni a tutti i progetti come base ... sì, questo viene fatto riferimento in ..) allora ho caricare tutte le assemblee in fase di runtime utilizzando:

Assembly assembly = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1"); 
Type type = assembly.GetType("MyClass"); 
object instanceOfMyType = Activator.CreateInstance(type); 

io uso questo per diversi motivi. Ho implementazioni di classi diverse che devo chiamare in base alla configurazione utente/cliente. Sembra anche una buona opzione per garantire che stai caricando un assembly specifico con il mio token pubblico e la versione.

Dopo una piccola ricerca, ho trovato questi post:

Beh, ero un po 'scioccato dopo aver guardato la tua domanda .. Si solleva preoccupazioni per me referenziare le mie DLL ora. Non so quanto sia sicuro questo, ma sembra essere più sicuro di un semplice riferimento.

Non ho trovato alcun riferimento nella documentazione MS per l'utilizzo di Assembly.Load e bypassTrustedAppStrongNames. Farò alcuni test più tardi, ma sembra più sicuro usare questo.

+3

Sì, sto leggendo su internet, quei link sono uno di questi e il nome forte sembra rotto più i suoi usi SHA1. Microsoft ha introdotto 'EnhancedStrongName' che usa SHA256 ma è da .net 4.5. – xmen