válida una standard signatura seguro referencia puede para nombre net manifiesto hacer firmar firma este ensamblado encuentra como certificados certificado cargar axinterop archivo almacén acropdflib .net strongname

una - ¿Hay algún problema con NO firmar un ensamblado de.NET?



no se puede cargar el archivo o ensamblado restsharp (10)

¿Su colega le ha dado alguna indicación de por qué le gusta firmar asambleas? Una ventaja de la firma que no se ha discutido hasta ahora es que solo las asambleas firmadas se pueden incluir en el GAC (es decir, se comparten entre procesos administrados), pero las desventajas parecen superar las ventajas desde mi perspectiva (sin ninguna experiencia).

Su anécdota acerca de la autofirma de código de Microsoft parece particularmente sospechosa para mí. Si MS no firmó el código, probablemente haya una razón, ¿no? Y al firmarlo, asumes la responsabilidad cuando no lo escribiste, otra oportunidad para que el futuro te muerda.

Uno de mis colegas está muy interesado en firmar asambleas. Literalmente intenta firmar cualquier cosa. Incluso cuando utilizamos ensamblajes de Microsoft que no están firmados, él tomará el código fuente, lo firmará y luego pedirá a otros desarrolladores que usen su copia.

Puedo entender la idea básica detrás de la firma de una asamblea: para asegurar que una asamblea particular no se vea comprometida por algún hacker poco fiable. Entonces, si somos una empresa de desarrollo de software, debemos firmar nuestro ensamblaje antes de lanzar una biblioteca .NET a nuestros clientes.

Sin embargo, principalmente desarrollamos aplicaciones web para nuestro propio uso aquí, y simplemente no veo el sentido de firmar cada ensamblaje que utilizamos.

¿Me estoy perdiendo de algo?


Aproveché las asambleas no firmadas para resolver problemas antes y en entornos académicos se mostró a las personas por qué es importante. Reemplacé un archivo DLL que no estaba firmado (de nuevo en un entorno académico) con uno que hice con el mismo nombre, las mismas firmas y utilicé .NET Reflector para copiar y pegar el código original, pero en el mío envié un correo electrónico con nombres de usuario y contraseñas que estaban siendo pasados ​​antes de llamar al código ''real''.

Si está firmado, puede hacer una coincidencia de firma, pero no reemplazar. Al contrario de lo que dice Zippy, habrá un error de compilación en tiempo de ejecución.

Firmar asambleas nunca es excesivo. Tarda 30 segundos. Es como decir que cerrar las puertas es excesivo si vives en el campo. Si quieres apostar tus pertenencias, adelante, déjala abierta. Solo se necesita una violación de seguridad para ser despedido. Solo se requieren 30 segundos para firmar un ensamblaje y no hay ningún caso empresarial que no lo haga. El impacto en el rendimiento es insignificante.


Estoy de acuerdo, parece un desperdicio. Es realmente necesario para garantizar que el archivo sea lo que piensas que es (y no ha sido alterado). Pero si confía en los confines de su propia red de seguridad y servidor web, la firma de sus ensamblados web parece un paso redundante.

Pero tal vez esa es mi experiencia de pequeña empresa hablando. Si está hablando de un sitio web de banca en línea crítico para la misión, entonces registrese.


Firmamos nuestros ensamblajes porque hay momentos en los que obtenemos errores como el siguiente (este es de las pruebas, pero puede ocurrir al ejecutar la aplicación):

System.IO.FileLoadException : Could not load file or assembly ''Latitude.Platform.Core, Version=1.0.5871.22518, Culture=neutral, PublicKeyToken=7926214d13e12325'' or one of its dependencies. The located assembly''s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) TearDown : System.IO.FileLoadException : Could not load file or assembly ''Latitude.Platform.Core, Version=1.0.5871.22518, Culture=neutral, PublicKeyToken=7926214d13e12325'' or one of its dependencies. The located assembly''s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Descubrimos que Visual Studio se equivoca a veces y ejecuta código viejo .

Si desea un error si está ejecutando código antiguo, firme sus ensamblajes.

Si está escribiendo un paquete Nuget , firme sus ensamblajes . Los ensambles sin firma son incómodos para nosotros que queremos asegurarnos de que estamos ejecutando la última versión de nuestro código. No puedo arreglar Visual Studio . Todo lo que puedo hacer es detectar que Visual Studio se equivocó. Entonces, por favor, firme sus ensamblajes Nuget .


Firmar ensamblajes que se usan dentro de un entorno de confianza me suena excesivo.

Un punto interesante en los ensambles firmados es que son un poco más lentos de cargar que los ensambles sin firmar, ya que deben ser verificados criptográficamente.

Para firmar un ensamblaje, cualquier ensamblaje del que dependa también debe estar firmado. Supongo que esto contribuye al deseo de su colega de firmar todo, el compilador lo exige.

EDITAR Desde que escribimos esta respuesta, podemos ver que tanto el campo pro como el contra tienen un soporte más o menos equivalente. Claramente no hay una respuesta correcta aquí.

Sin embargo, el punto que impulsó esta edición es que hoy en día tomamos tantas librerías de código abierto de NuGet, y muchas de ellas no están firmadas en absoluto. Si desea firmar su ensamblaje, debe tener también dependencias firmadas. Muchas de las bibliotecas de código abierto que se firman tienen las claves privadas utilizadas para firmar públicamente disponibles en sus repositorios de origen.

Al igual que con todo, hay que hacer concesiones. En mi experiencia de trabajar en entornos privados, los beneficios de la firma son en su mayoría teóricos (o académicos, como menciones @user289100 ), a menos que te preocupen las agencias gubernamentales que modifiquen tu código, en cuyo caso debes ser paranoico con tantos niveles de su infraestructura que la firma parecería una pequeña cantidad de esfuerzo. De lo contrario, la cantidad de desafíos que caen en cascada al tener que firmar todo simplemente no parece valer la pena. Sin embargo, su entorno puede tener diferentes requisitos o puede ser un masoquista.

Consulte también la respuesta de Teun D para obtener información sobre los desafíos relacionados con los ensamblados de control de versiones al usar nombres fuertes.


Las firmas solo son necesarias si las asambleas se colocan en el GAC, nada más. Las asambleas firmadas no impiden que alguien se meta con ellas. Un hacker aún puede quitar la firma y cualquier otro código que verifique la firma.


Otra cosa sobre la firma de una asamblea es que uno no puede inyectar uno incorrecto en lugar del suyo (también usted mismo por un accidente). Por ejemplo, si crea un programa que hace referencia a un ensamblado Foo.dll, versión 1.0, alguien puede crear un ensamblado, con la misma versión y reemplazar el suyo, cuando firme su biblioteca, no será posible (en al menos no creo que sea fácilmente posible).


Piense en hacerlo si va a enviar algo y / o realmente tiene una razón para hacerlo. En cualquier otro caso, es solo una molestia. Le preguntaría a tu compañero de trabajo qué es lo que realmente consigue al hacer esto.

Me he encontrado con assemblies-itis antes y es un dolor en la parte posterior, especialmente cuando se tiene en cuenta la cantidad de personas que tienen poco o ningún conocimiento de la firma de ensamblajes, para qué sirve y cómo hacerlo. Es solo otra cosa con la que no deberías preocuparte a menos que sea absolutamente necesario.


Un punto adicional: la firma de sus ensamblajes rompe la compatibilidad con versiones anteriores. Todas sus referencias comienzan a incluir números de versión y las versiones con otros números de versión se consideran no compatibles. Esto dificulta la actualización a versiones más nuevas de ensambles distribuidos.

En mi opinión, solo debe ensamblar un signo de código si ve alguna ganancia concreta de él:

  • si se despliega en entornos donde las personas no confiables pueden tocar sus ensamblajes
  • en ciertos modelos de plug-in, donde desea utilizar el certificado como evidencia para actualizar la confianza
  • si su código debe ser invocable desde otro código firmado (un proyecto como, por ejemplo, log4net, firma justificadamente su código para que sea ampliamente utilizable; se equivocaron enormemente en compatibilidad al perder su clave secreta hace unos años, otro riesgo de firma de código) .
  • si desea implementar en el GAC

XBAP firmar su ensamblaje cuando se utiliza en un ClickOnce XBAP implementado desde la web.

Además, todos los ensambles referenciados necesitarán ser firmados también.