tool strongly strong name .net assemblies signing

strongly - Las mejores prácticas para firmar ensamblados.NET?



strongly named assembly (5)

Tengo una solución que consta de cinco proyectos, cada uno de los cuales se compila para separar ensamblajes. Ahora mismo estoy firmando el código, pero estoy bastante seguro de que lo estoy haciendo mal. ¿Cuál es la mejor práctica aquí?

  • Firme cada una con una clave diferente; asegúrese de que las contraseñas sean diferentes
  • Firme cada una con una clave diferente; usa la misma contraseña si quieres
  • Firme cada uno con la misma clave
  • Algo completamente diferente

Básicamente no estoy muy seguro de lo que les hace "firmar", o cuáles son las mejores prácticas aquí, por lo que una discusión más general sería buena. Todo lo que sé es que FxCop me gritó y fue fácil de solucionar haciendo clic en la casilla de verificación "Firmar este ensamblaje" y generando un archivo .pfx usando Visual Studio (2008).


Ayuda porque el ejecutable espera un ensamblado con un nombre fuerte. Detiene a cualquiera que sustituya maliciosamente en otra asamblea por uno de los suyos. Además, el usuario puede otorgar un conjunto de permisos CAS en función del nombre seguro.

No creo que deba distribuir el archivo .pfx; lo mantiene seguro para renunciar al ensamblado.


La diferencia más obvia entre conjuntos firmados y sin firmar es en una aplicación ClickOnce. Si no lo firmas, los usuarios obtendrán un cuadro de diálogo de advertencia "Desconocido Editor" la primera vez que ejecuten tu aplicación. Si lo ha firmado con un certificado de una autoridad de confianza , entonces verá un diálogo que es menos aterrador. Por lo que yo sé, firmar con un certificado que generes tú mismo no afecta la advertencia de "editor desconocido". SSL instantáneo de Comodo tiene ejemplos de los diálogos.

Hay algunas diferencias más sutiles. Debe firmar un ensamblaje antes de poder instalarlo en el caché de ensamblaje global (GAC) donde varias aplicaciones lo pueden compartir. La firma es parte integral de la seguridad de acceso a los códigos (CAS), pero no he encontrado a nadie que pueda hacer que CAS funcione. Estoy bastante seguro de que tanto el GAC como CAS funcionan bien con los certificados que usted mismo genera.


Si su único objetivo es evitar que FxCop le grite, entonces ha encontrado la mejor práctica.

La mejor práctica para firmar sus ensamblajes es algo que depende completamente de sus objetivos y necesidades. Necesitaríamos más información, como su implementación prevista:

  • Para uso personal
  • Para uso en PC de red corporativa como una aplicación cliente
  • Corriendo en un servidor web
  • Ejecutando en SQL Server
  • Descargado a través de internet
  • Se vende en un CD en envoltura retráctil
  • Cargado directamente en un cerebro cibernético
  • Etc.

En general, utiliza la firma de código para verificar que los Ensambles provienen de una fuente confiable específica y no han sido modificados. Entonces, cada uno con la misma clave está bien. Ahora, cómo se determina esa confianza e identidad es otra historia.

ACTUALIZACIÓN: Cómo esto beneficia a sus usuarios finales cuando está implementando en la web si ha obtenido un certificado de firma de software de una autoridad de certificación . Luego, cuando descarguen sus ensamblajes, podrán verificar que provienen de Domenic''s Software Emporium , y que no se han modificado o dañado en el camino. También querrá firmar el instalador cuando se descargue. Esto evita la advertencia de que algunos navegadores muestran que se obtuvo de una fuente desconocida.

Tenga en cuenta que pagará por un certificado de firma de software. Lo que obtienes es que la autoridad de certificación se convierta en la tercera parte confiable que verifique que eres quien dices ser. Esto funciona debido a una red de confianza que se remonta a un certificado raíz que está instalado en su sistema operativo. Hay algunas autoridades de certificación para elegir, pero querrá asegurarse de que sean compatibles con los certificados raíz en el sistema operativo de destino.


La firma se usa para identificar un ensamblaje de manera única. Más detalles están en Cómo: Firmar un ensamblaje (Visual Studio) .

En términos de mejores prácticas, está bien usar la misma clave siempre que los ensamblajes tengan diferentes nombres.


Es importante mantener su archivo PFX en secreto ya que contiene la clave privada.

Si esa clave se pone a disposición de otros, cualquiera puede firmar asambleas o programas que se disfrazan como usted.

Para asociar su nombre con sus ensamblajes (a los ojos de Windows) tendrá que obtener un certificado digital (la parte del archivo PFX que contiene su nombre) firmado por una autoridad de confianza.

En realidad, obtendrás un nuevo certificado, pero con la misma información.

Tendrá que pagar este certificado (probablemente anualmente), pero la autoridad de certificación responderá por su existencia (después de que les haya enviado por fax copias de su pasaporte o permiso de conducir y una factura nacional).