Estoy implementando una función de actualización automática y necesito algunos consejos sobre cómo hacerlo de forma segura utilizando las mejores prácticas. Me gustaría usar la firma Authenticode del archivo descargado para verificar que sea seguro ejecutar (es decir, se origina en nuestra empresa y no se ha manipulado). Mi pregunta es muy similar a la pregunta # 2008519.Verifique la firma de Authenticode como de nuestra empresa para el actualizador automático
La pregunta final: ¿cuál es la mejor y más segura forma de verificar las firmas Authenticode para una función de actualización automática? ¿Qué campos en el certificado deberían verificarse? Los requisitos son: (1) verificar la firma es válida, (2) verificar que es mi firma, (3) los clientes antiguos aún pueden actualizar cuando mi certificado expire y yo obtengo uno nuevo.
He aquí alguna información de fondo/ideas de mi investigación: Creo que esto podría ser dividida en dos pasos:
verificar que la firma es válida. Creo que esto debería ser fácil usando WinVerifyTrust como se describe en http://msdn.microsoft.com/en-us/library/aa382384(VS.85).aspx - No espero problemas aquí.
Verifique que la firma corresponda a nuestra empresa y no a otra. Esta parece ser una pregunta más difícil de responder:
Una posibilidad es verificar algunas de las cadenas en la firma. Se puede obtener a través del código en el artículo de MS KB # 323809, pero este artículo no hace recomendaciones sobre qué campos se deben verificar para este tipo de aplicación (o cualquier otra, para el caso). Question #1072540 también ilustra cómo obtener cierta información del certificado, pero nuevamente no recomienda qué campos comprobar realmente. Me preocupa que las cadenas no sean la mejor opción: ¿qué ocurre si otra persona puede obtener un certificado con el mismo nombre, por ejemplo? ¿O si hay una razón válida para que cambiemos las cuerdas en el futuro?
La persona en question #2008519 tiene un requisito muy similar. Su necesidad de una función "TrustedByUs" es idéntica a la mía. Sin embargo, él hace el cheque comparando llaves públicas. Si bien esto funcionaría a corto plazo, parece que no funcionará para una función de actualización automática. Esto se debe a que los certificados de firma de código solo son válidos por 2 a 3 años como máximo. Por lo tanto, en el futuro, cuando compramos un nuevo certificado en 2 años, los clientes antiguos ya no podrán actualizar debido al cambio en la clave pública.
Seguimiento: Terminé más o menos haciendo la sugerencia de Brian. (1) Verificar la firma de Authenticode con WinTrustVerify, (2) verificar el asunto de la firma de Authenticode; asegúrese de que la cadena coincida con el nombre de mi empresa, (3) como medida adicional, hago una firma separada con DSA. La firma se envía junto con el archivo ejecutable y se marca. –
Consulte también [Formato de firma ejecutable portátil de Windows Authenticode] de Microsoft (http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx). – jww