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:
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.
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.
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. –
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