c# .net assemblies

c# - Firma de asambleas-conceptos básicos



.net assemblies (4)

¿Qué significa firmar una asamblea?

Firmar una asamblea es darle un nombre fuerte a la asamblea.

¿Por qué se hace?

Primero, hagamos una distinción importante. Una forma de clasificar los ensamblados en .NET es la siguiente:

  • El ensamblaje privado está aislado para que lo use una sola aplicación (el valor predeterminado). Generalmente se encuentra en el mismo directorio que la aplicación.
  • Shared Assembly , es accesible globalmente por todas las aplicaciones en su máquina. Por lo general, se encuentra en el GAC y debe estar firmado, es decir, debe tener un nombre sólido (compuesto por el nombre, la versión, la clave pública y la cultura de la asamblea).

¿Por qué? Tener un nombre seguro garantiza que su ensamblaje es único y que nadie puede robar el GUID (como en COM) para crear un objeto diferente con el mismo nombre. En otras palabras, se asegura de que cuando carga un ensamblaje firmado, esté cargando exactamente lo que cree que está cargando. Eric Lippert ofreció una gran respuesta a esta pregunta en particular here .

Esto no es lo mismo que decir que se puede confiar en un ensamblado firmado. Para eso, un ensamblaje puede incluir Authenticode , una firma digital para proporcionar información sobre el desarrollador / compañía del ensamblaje.

¿Cuál es la forma más sencilla de firmarlo?

La siguiente es la versión corta de MSDN paso a paso :

  1. Crea una clave fuerte usando SN.EXE

    sn -k C: / mykey.snk

  2. Desde Visual Studio, en la página de Propiedades de su proyecto, vaya a la pestaña de Firma y marque "Firmar el ensamblaje" para seleccionar el archivo que se acaba de crear.

  3. Reconstruye tu proyecto, y listo. Tu montaje ya está firmado. Puedes ver esto en el archivo CSPROJ de tu proyecto:

<PropertyGroup> <SignAssembly>true</SignAssembly> </PropertyGroup> <PropertyGroup> <AssemblyOriginatorKeyFile>mykey.snk</AssemblyOriginatorKeyFile> </PropertyGroup>

  1. La herramienta gacutil le permite administrar su ensamblaje compartido en el GAC:
    • Instalar: gacutil / i myassembly.dll
    • Ver el ensamblaje en GAC: gacutil / l myassembly.dll
    • Desinstalar: gacutil / u myassembly.dll

¿Para qué sirve el archivo .SNK?

El SNK es el archivo ''Clave de nombre fuerte''.

¿Qué significa firmar una asamblea? ¿Y por qué se hace?

¿Cuál es la forma más sencilla de firmarlo? ¿Para qué sirve el archivo .snk?


La firma está ahí para demostrar que el ensamblaje lo ha creado una persona o empresa conocida y no ha sido modificado por nadie más.

Al firmar un conjunto, se crea un hash y se firma con una clave privada. Si se modifica el ensamblaje, por ejemplo, por un malware, es fácil de averiguar comprobando el hash y la firma utilizando la clave pública (que se incluye en el ensamblaje).

Por lo tanto, firmar el ensamblaje es proteger el sistema de destino para que no sea hackeado. Podría desactivar las comprobaciones de firma en la configuración de .NET. Es de interés para el usuario final que se comprueben las firmas. Las firmas se comprueban al cargar los ensamblajes.

El archivo snk contiene la clave privada para firmar el ensamblaje y la clave pública para verificarlo. Necesita ser protegido. Si alguien obtiene su clave privada, puede firmar asambleas como si estuvieran firmadas por usted.

La forma más sencilla de firmarlo es elegir el archivo snk dentro de la configuración del proyecto.


Las otras dos respuestas están bien, pero un punto adicional. Es fácil confundirse entre la firma de "certificado" y la firma de "nombre seguro".

El propósito de la firma de un nombre fuerte es como dice Stefan Steinegger: para permitir que su cliente establezca que el código que PIENSAN que están cargando en realidad es precisamente el código que ESTÁN cargando. Eso es TODOS los nombres fuertes son para. Específicamente, los nombres sólidos no establecen ningún tipo de relación de confianza entre su cliente y usted. Si el cliente decide que confía en el código que viene de usted, es responsabilidad de ELLOS averiguar exactamente cuál es el nombre correcto correcto para su código. El problema de "administración de claves" no se resuelve de ninguna manera; El cliente tiene la carga de averiguar cómo saber en qué clave confiar.

La firma de certificados, es decir, la firma con un certificado que obtiene de Verisign o alguna otra autoridad certificadora, tiene un propósito mucho más complejo. El propósito de la firma del certificado es establecer una cadena autenticada de confianza e identidad desde la autoridad certificadora hasta la organización que firmó el código. Es posible que su cliente no confíe en usted, tal vez ni siquiera haya oído hablar de usted, pero su cliente puede decir "si Verisign confirma la identidad del autor de este código, entonces confiaré en ellos". El problema de administración de claves se reduce para el cliente porque la autoridad certificadora ha asumido esa carga por ellos.


Significa dar a la asamblea una identidad única. Esto se hace para que exista una garantía de que un ensamblaje provenga de una fuente en particular. Vea el artículo de MSDN Asambleas de nombres fuertes . Un ensamblaje con nombre seguro admite la ejecución en paralelo , la colocación de ensamblajes en el GAC , el Versioning y algunas otras características.

La forma más sencilla de firmar es usar las propiedades del proyecto en Visual Studio, la pestaña de firma. En realidad, esto agrega una entrada XML en el archivo .csproj que le indica al motor de compilación que firme el ensamblaje con dicho archivo de clave. El archivo clave es este archivo ".snk" del que estamos hablando. Se genera utilizando la herramienta sn.exe .NET . Contiene toda la información necesaria para firmar una assembly .