2010-07-13 12 views
5

Mi sento come se mi mancasse qualcosa di ovvio, ma non lo vedo scritto da nessuna parte.Verifica della firma dell'autenticode all'esecuzione dell'applicazione .NET

Firmo i miei eseguibili utilizzando un certificato Authenticode, ma come ho iniziato a imparare un po 'di più su di esso, sto chiedendo il valore così com'è.

  • Un exe firmato ha un certificato digitale che si presenta come un certificato "valido". Quando si scarica tale file da Internet, viene visualizzato un avviso in Windows che informa che si sta per eseguire un programma da una posizione potenzialmente non sicura pubblicata da Xyz Corporation.
  • senza la firma, il file scaricato darà un messaggio di avviso totalmente diverso aspetto dice che il file non è attendibile

Ora, quello che mi riguarda, è:

  • Se un exe firmato è alterato, quando vai in Proprietà> Firme digitali> Seleziona firma> Dettagli ... mostra "Questa firma digitale non è valida". Questo è un modo piuttosto oscuro per visualizzare quello che è probabilmente un problema grave e un enorme indicatore che non si dovrebbe eseguire il file.

    • Se si esegue questo file da Windows (non scaricato), verrà eseguito correttamente. Nessun avviso o nessuna indicazione c'è qualcosa di sbagliato
    • Non ho controllato cosa succede se scarichi il file e poi provi ad eseguirlo.
  • Se si elimina la firma dal file (utilizzando delcert), non vi è alcuna indicazione che qualcosa non va. Anche in questo caso, è possibile eseguire il file e non viene visualizzato alcun certificato nella finestra di dialogo delle proprietà.


per renderlo più utile, sto pensando che un file firmato deve verificare se stessa. All'avvio, è necessario verificare che vi sia una firma valida e potenzialmente che l'impronta digitale sha1 della firma corrisponda alla firma prevista per il certificato Xyz Corporation.

(Certo, questo ancora non gestisce la situazione in cui qualcuno si spoglia il certificato e quindi modifica il file per rimuovere il controllo del certificato)


Non riesco a trovare nessuno a parlare di come fare questo (almeno non in .NET, e certamente non con una semplice chiamata API come mi aspetterei) - quindi questo porta a un paio di domande:

  1. C'è un motivo per cui la firma non viene controllata? Quali altri vantaggi ci sono per firmare senza questo controllo?
  2. Sta provando a verificare la firma come mezzo di rilevamento di manomissioni così futile che è inutile provare?
  3. Come si controlla il certificato dell'eseguibile corrente in .NET?
+1

Per .NET si dovrebbe utilizzare nome sicuro firma, non Authenticode. –

risposta