2011-01-04 22 views
8

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:

  1. 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í.

  2. 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.

+0

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

+0

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

Respuesta

3

La persona en la pregunta # 2008519 tiene un requisito muy similar. Su necesidad de una función "TrustedByUs" es idéntica a la mía. Sin embargo, va a hacer el cheque comparando claves públicas. Si bien esto funcionaría en el 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 para 2 - 3 años máx. Por lo tanto, en el futuro, cuando compramos un nuevo certificado en 2 años, los clientes anteriores no serían capaces de actualizar más debido al cambio en clave pública.

Dado que la preocupación es que la aplicación confíe en usted y no en que una persona confíe en usted, puede utilizar la autofirma e incrustar las claves públicas necesarias en las propias aplicaciones. Esto le da mucho más control sobre el proceso.Esto es inapropiado cuando se solicita confianza a un usuario o aplicación que no está bajo su control, pero en este caso la aplicación está bajo su control, por lo que funcionará correctamente. Esto le permite evitar fácilmente la preocupación de confundir el certificado de apariencia similar de otra persona con el suyo.

+0

El actualizador automático va a utilizar el mismo programa de instalación que usa el usuario al descargar inicialmente el software de nuestro sitio web. La solución de auto-firma funciona cuando la aplicación ya se ha instalado con la clave pública conocida de auto-firma. ¿Qué ocurre con la descarga inicial cuando se les pregunta si ejecutar el programa descargado por Windows/navegador web? Para esto, tiene que estar firmado por una CA raíz confiable. Quizás (¿es posible?) Que el EXE esté firmado tanto por la firma propia como por el certificado adquirido de una CA raíz ... –

+1

@James: podría simplemente poner la firma del auto-sello en un archivo separado. Usted tiene control total sobre la comunicación entre el servidor y el actualizador automático. – Brian

Cuestiones relacionadas