2012-05-06 13 views

Respuesta

13

La respuesta simple es sí y no, para empezar, depende del propósito para el que usted es fuerte al firmar sus ensamblajes.

La página de MSDN en Strong-Name Signing resume los dos propósitos bastante bien.

Strong-naming le otorga a una aplicación o componente una identidad única que otro software puede usar para referirse explícitamente a ella. Por ejemplo, strong-naming permite a los autores y administradores de la aplicación especificar una versión de servicio precisa que se utilizará para un componente compartido. Esto permite que diferentes aplicaciones especifiquen diferentes versiones sin afectar otras aplicaciones. Además, puede usar el nombre fuerte de un componente como evidencia de seguridad para establecer una relación de confianza entre dos componentes.

Cualquier biblioteca distribuida públicamente (DLL) debe tener un nombre seguro firmado, siempre que esté destinado a ser consumido por el usuario final. (es decir, a menos que sea un detalle de implementación o similar)

El propósito principal de la firma que he visto suele ser por razones más técnicas, incluida una identificación única (los espacios de nombres a veces pueden chocar inadvertidamente) y hacer un ensamblado disponible para el GAC. En tales casos, hacer que el archivo de clave esté a disposición del público no tiene implicaciones de seguridad, ya que en principio no se pretendía. No se proporcionan garantías de confianza/origen, pero la identificación única sigue siendo válida. La página de MSDN trata principalmente este escenario; los tiempos cuando debería y no debe firmar una asamblea; y los detalles circundantes.

Sin embargo, si está firmando un ensamblaje por autenticación, específicamente para garantizar al consumidor que el ensamblaje proviene de la fuente solicitada, una clave exotérica (distribuida públicamente) invalida por completo este modelo de confianza. Es decir, cualquiera puede ir modificando el código de su proyecto arbitrariamente, y reconstruir y renunciar a sus ensamblajes de manera correcta, esencialmente falsificando su identidad. La página de MSDN no aborda este uso por desgracia (probablemente porque debe considerarse más ampliamente como parte de una estrategia de seguridad), pero es importante, no obstante.

Finalmente, tenga en cuenta que hay dos tipos de archivos de certificados de claves que el CLR/.NET usa para firmar ensamblajes. El primero es un SNK, como usted menciona; esto no está protegido con contraseña. El segundo es PFX, que en realidad es solo una versión protegida por contraseña de un archivo de clave SNK. Siempre que esta contraseña sea lo suficientemente segura, existe por lo tanto sin problemas de seguridad en la distribución de un PFX asegurado con su software de código abierto. Visual Studio (y la utilidad de generación de la clave de línea de comandos) son, por supuesto, capaces de crear ambos.

+0

Es posible que también desee ver esta respuesta y extrapolar de forma adecuada para los archivos de clave PFX. – Noldorin

+0

Y 'sn.exe' es la utilidad de creación/manipulación de nombres fuertes que desea si se ejecuta desde la línea de comandos. Proporciona algunas características justas, la mayoría de las cuales probablemente nunca necesitará. http://msdn.microsoft.com/en-us/library/k5b5tt23%28v=vs.100%29.aspx – Noldorin

Cuestiones relacionadas