2010-10-20 12 views
120

En algún código C# que he tomado (en Visual   Studio   2005), he notado que los ensamblados están todos firmados con el mismo archivo .snk.C#: ¿por qué firmar un conjunto?

  • ¿Por qué el autor anterior ha firmado los ensamblajes de esta manera?
  • ¿Es necesario firmar montajes y qué sería incorrecto al no iniciar sesión?
  • ¿Qué desventajas hay en los ensamblajes de firma ? ¿Causan retrasos?

Respuesta

138

¿Por qué el autor anterior ha firmado los ensamblajes de esta manera?

No tenía idea, tal vez quería que todos sus ensamblajes se firmaran con la misma clave.

¿Es necesario firmar los ensamblajes y cuál sería el error al no firmarlo?

No, no es necesario, pero es un mecanismo que le permite garantizar la autenticidad de un conjunto. Le permite asegurarse de que un ensamblaje no haya sido alterado y, de hecho, proviene de este autor. También es necesario si desea incluirlos en el GAC.

¿Qué desventajas existen en la firma de ensamblajes? ¿Causa retrasos?

Los ensambles con signo solo pueden cargar otros ensamblados con signo. También están vinculados a una versión específica, lo que significa que debe usar redireccionamientos de enlace o recompilar la aplicación si desea utilizar una versión diferente. También hay un poco de sobrecarga de rendimiento debido a la verificación de la firma, pero es tan poco que no debería preocuparse.

+3

Brillante respuesta – Eon

+0

Tenga en cuenta que la verificación de firmas ya no tiene lugar (desde .NET 2.0) cuando se coloca en GAC; [solo ocurre una vez, al agregarlo al GAC] (http://davidyardy.com/archive/strong-names-and-signing-assemblies-netaspx/). – Abel

+0

¿Qué piensas sobre la firma hoy en día? En sistemas basados ​​en web? Si estoy en lo correcto, solo era necesario cuando hablaba de softwares instalados, ¿verdad? Si publico mi aplicación en Azure usando TFS, sé que no ha sido alterada, ¿verdad? ¿O me falta algo de seguridad? –

31

Debe firmar ensamblajes si desea ponerlos en el GAC.

Si firma un archivo ejecutable, todas las bibliotecas de clase a las que enlaza también deben estar firmadas. Esto puede ser difícil si está usando una biblioteca de terceros (especialmente si necesita usar un control ActiveX o similar).

Richard Grimes haber escrito un buen taller sobre seguridad en .NET y que incluye un capítulo sobre esto: Security Workshop

La razón de todos los conjuntos que se están firmó con el mismo archivo .snk podría ser si se utiliza la unidad prueba con cobertura de código. Para poder hacer una cobertura de código (al menos con las herramientas integradas en la versión de prueba de Visual   Studio   2005) y si los ensamblajes están firmados, debe especificar qué archivos .snk se utilizan para la firma, pero creo que solo puede especificar un archivo .snk para la solución completa, por lo que si firma las distintas bibliotecas de clases con diferentes archivos .snk, solo puede verificar la cobertura del código en uno de ellos a la vez.

+0

Se traslada a http://www.grimes.nildram.co.uk/workshops.htm – LiamV

+0

@LiamV Gracias, actualizada. –

15

Una razón muy importante para firmar un ensamblaje es para que pueda estar seguro de que es su ensamblaje. Como la clave privada es suya, nadie más puede firmar un ensamble con esa misma clave.Esto significa que cuando conoce la clave pública de un ensamblaje (puede recuperarla usando la función GetType().Assembly.GetName().GetPublicKey()), el ensamblaje es suyo y no ha sido alterado.

1

A pesar de todos los usos de la firma de DLL, el DLL debe ser firmado por sólo dos razones

1. de versiones

2. Autenticación

a. Las versiones denotan en qué versión se ha construido el dll y mientras las empuja hacia el GAC pueden existir dos archivos DLL con el mismo nombre, pero con una versión diferente

b. La autenticación indica si el dll no está alterado y si existe el mismo cuando se creó.

Si se quiere entender más acerca de los conceptos básicos y la firma de DLL puede hacer referencia here

+1

¿Qué piensas sobre la firma hoy en día? En sistemas basados ​​en web? Si estoy en lo correcto, solo era necesario cuando hablaba de softwares instalados, ¿verdad? Si publico mi aplicación en Azure usando TFS, sé que no ha sido alterada, ¿verdad? ¿O me falta algo de seguridad? –

+1

No veo una razón por la que deberíamos firmar un dll ahora, que se implementará como una solución de Paas en azul. Pero si tiene una solución de iaas, puede reutilizar la dll mediante una aplicación web en el mismo iis. Lo cual no recomiendo deberíamos llamarlos a través de una API, en lugar de utilizar esos dll de GAC (arquitectura de microservicio). –

Cuestiones relacionadas