2011-01-04 11 views
8

Sto implementando una funzione di aggiornamento automatico e ho bisogno di alcuni consigli su come farlo in modo sicuro utilizzando le migliori pratiche. Vorrei utilizzare la firma Authenticode del file scaricato per verificare che sia sicura da eseguire (ovvero, proviene dalla nostra azienda e non è stata manomessa). La mia domanda è molto simile alla domanda # 2008519.Verificare la firma Authenticode come proveniente dalla nostra azienda per l'aggiornamento automatico

La domanda di fondo: qual è il modo migliore e più sicuro per controllare le firme Authenticode per una funzionalità di aggiornamento automatico? Quali campi nel certificato dovrebbero essere controllati? I requisiti sono: (1) controllare la firma è valida, (2) controllare è la mia firma, (3) i vecchi client possono ancora aggiornare quando il mio certificato scade e ne ottengo uno nuovo.

Ecco alcune informazioni di base/idee dalla mia ricerca: Credo che questo potrebbe essere suddiviso in due fasi:

  1. Verificare che la firma è valida. Credo che questo dovrebbe essere facile utilizzando WinVerifyTrust come descritto in http://msdn.microsoft.com/en-us/library/aa382384(VS.85).aspx - Non mi aspetto problemi qui.

  2. Verificare che la firma corrisponda alla nostra azienda e non a un'altra società. Questa sembra essere una domanda più difficile a cui rispondere:

Una possibilità è controllare alcune stringhe nella firma. Potrebbe essere ottenuto tramite codice in MS KB articolo # 323809, ma questo articolo non fornisce consigli su quali campi devono essere controllati per questo tipo di applicazione (o qualsiasi altra, per quella materia). Question #1072540 illustra anche come ottenere alcune informazioni sul certificato, ma di nuovo non consiglia quali campi effettivamente controllare. La mia preoccupazione è che le stringhe potrebbero non essere il miglior controllo: cosa succede se un'altra persona è in grado di ottenere un certificato con lo stesso nome, ad esempio? O se c'è un motivo valido per cambiare le stringhe in futuro?

La persona allo question #2008519 ha un requisito molto simile. Il suo bisogno di una funzione "TrustedByUs" è identico al mio. Tuttavia, egli fa il controllo confrontando le chiavi pubbliche. Mentre ciò funzionerebbe a breve termine, sembra che non funzioni per una funzione di aggiornamento automatico. Questo perché i certificati di firma del codice sono validi solo per 2 - 3 anni max. Pertanto, in futuro, quando acquisteremo un nuovo certificato in 2 anni, i vecchi client non potrebbero più aggiornarsi a causa della modifica della chiave pubblica.

+0

Followup: mi sono avvicinato più o meno al suggerimento di Brian. (1) Verificare la firma Authenticode con WinTrustVerify, (2) controllare l'oggetto della firma Authenticode; assicurati che la stringa corrisponda al nome della mia azienda, (3) come misura aggiuntiva, eseguo una firma separata con DSA. La firma viene inviata insieme al file eseguibile e selezionata. –

+0

Vedere anche [Formato di autenticazione eseguibile portatile di Windows Authenticode] (http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx). – jww

risposta

3

La persona alla domanda # 2008519 ha un requisito simile a . La sua esigenza di una funzione "TrustedByUs" è identica a . Tuttavia, si occupa di eseguire il controllo confrontando le chiavi pubbliche. Anche se funzionerebbe nel breve periodo , sembra che non funzionerà per una funzione di aggiornamento automatico . Questo perché i certificati di firma del codice sono validi solo per 2 - 3 anni max. Pertanto, in futuro, quando acquistiamo un nuovo certificato in 2 anni, i vecchi client non sarebbero in grado di aggiornarsi ulteriormente a causa della modifica della chiave pubblica .

Poiché la preoccupazione è che l'applicazione si fidi di te piuttosto che di una persona che si fida di te, potresti semplicemente utilizzare l'autofirmazione e incorporare tutte le chiavi pubbliche necessarie nelle applicazioni stesse. Questo ti dà molto più controllo sul processo.Questo è inappropriato quando si chiede a un utente o un'applicazione non sotto il proprio controllo di dare fiducia, ma in questo caso l'applicazione è sotto il vostro controllo, quindi funzionerà correttamente. Ciò ti consente di evitare molto facilmente la preoccupazione di confondere il certificato di un altro simile per qualcun altro.

+0

L'updater automatico utilizzerà lo stesso programma di installazione che l'utente utilizza quando inizialmente scarica il software dal nostro sito web. La soluzione di firma automatica funziona quando l'applicazione è già stata installata con la chiave pubblica self-sign conosciuta. Che dire del download iniziale quando viene chiesto se eseguire il programma scaricato da Windows/browser web? Per questo, deve essere firmato da una CA radice affidabile. Forse (è possibile?) Che l'EXE sia firmato sia dalla firma personale che dal certificato acquistato da una CA radice ... ?? –

+1

@James: si potrebbe facilmente mettere la firma dell'autodiagnosi in un file separato. Hai il controllo totale sulla comunicazione tra il server e l'aggiornamento automatico. – Brian

Problemi correlati